主要搭建过程
1. Pom.xml 文件中加入 Mybatis 和数据库依赖 , 这里使用 MySql :
<Properties> <mybatis.version> 3.2.3 </mybatis.version> <mysql.version> 5.1.26 </mysql.version> <lf4j.api.version> 1.7.5 </slf4j.api.version> <testng.version> 7.8. <GroupId> org.mybatis </rombandid> <Artifactid> Mybatis </ artifactid> <in version> $ {MyBatis.Version} </ Version> </Dendency> <! - Database Driver -> <Dendency> <ProupId> MySQL </prounid> <Artifactid> Mysql-Connector-Java </ ArfactId> <version> $ {mysql.version} </ version> </ dépendance> <! - Mybatis 启动要加载 log4j -> <dependency> <proupId> org.slf4j </proncId> <Artifactid> slf4j-log4j12 </ artifactid> <version> $ {Slf4j.api.version} </ version> <dependency> <proupId> org.testng </proupId> <ArtifactId> Testng </ artifactId> <DERSE> $ {testng.version} </-version> </dependency> </peedents>
2. 在类路径下创建 Mybatis 的配置文件 Configuration.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Configuration public "- // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config.dtd"> <configuration> alias = "user" type = "com.john.hbatis.model.user" /> </ typealiases> <environnements default = "Development"> <Environment id = "Development"> <transactionmanager type = "jdbc" /> <dataSource type = "Poolled"> <! - 数据源 -> <propriété nom = "Driver" Value = "com.mysql.jdbc. name = "url" value = "jdbc: mysql: // localhost: 3306 / hbatis" /> <propriété name = "username" value = "root" /> <propriété name = "mot de passe" value = "123456" /> </ dataSource> </ environnement> ressource = "com / john / hbatis / modèle / user.xml" /> </mappers> </figuration>
3. 执行创建数据库和表的 SQL:
- Créez la base de données nommée «Hbatis». - Il est acceptable d'utiliser `, pas OK pour utiliser 'ou" entourant le nom de la base de données pour empêcher qu'il ne soit interprété comme un mot-clé si possible. Créez une base de données s'il n'est pas existant `HBATIS` LE SET DE DÉFAUT =` UTF8`'; - Créer un tableau nommé `` User '' Create Table `User` (` id` int (11) Null Auto_increment, `Name` NULL, `ADRESS` VARCHAR (200) par défaut NULL, clé primaire (` id`)) moteur = innodb auto_increment = 2 charet par défaut = utf8;
4. com.john.hbatis.model.user 类 :
classe publique User {private int id; nom de chaîne privé; âge des cordes privées; adresse de chaîne privée; // les getters et les setters sont omis // 如果有带参数的构造器 , 编译器不会自动生成无参构造器。当查询需要返回对象时 , orm 框架用反射来调用对象的无参构造函数 , 导致异常 : java.lang.nosuchMethodexception: com.john.hbatis.model.user. <Init> () // 这时需要明确写出 : User () {} public Uset (int id, adresse de chaîne) {this.id = id; this.address = adresse; } Utilisateur public (nom de chaîne, int, adresse de chaîne) {this.name = name; this.age = âge; this.address = adresse; }}com / John / hbatis / modèle 路径下的 user.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappep Public "- // Mybatis.org//dtd Mappen 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "com.john.hbatis.model.usermapper"> <select id = "getuserByid" ParameterType = "int" resultType = "user"> SELECT * FROM `User` où id = # {id} </lect> </ Mapper>
5. : :
classe publique MyBatiSBasicTest {private static final logger log = loggerfactory.getLogger (mybatisBasicTest.class); SQLSessionFactory statique privé SQLSessionFactory; lecteur de lecteur statique privé; @BeForeclass public static void initial () {try {reader = Resources.getResourceAsReader ("configuration.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder (). Build (lecteur); } catch (ioException e) {log.Error ("Erreur lancé lors de la lecture de la configuration: {}", e); } enfin {if (reader! = null) {try {reader.close (); } catch (ioException e) {log.Error ("Erreur lancé tout en fermant le lecteur: {}", e); }}}} @Test public void queryTest () {SqlSession Session = SqlSessionFactory.OpenSession (); User user = (user) session.selectone ("com.john.hbatis.model.usermapper.getuserbyid", 1); log.info ("{}: {}", user.getName (), user.getAddress ()); }}以接口方式交互数据
上面的环境搭建是采用 SQLSESSION 的通用方法并强制转换的方式 , ::
User user = (user) session.selectone ("com.john.hbatis.model.usermapper.getuserbyid", 1);可以采用接口加 SQL 语句的方式来解决 , SQL 语句理解为是接口的实现:
1. 新建接口类 :
Package com.john.hbatis.mapper; import com.john.hbatis.model.user; interface publique iUserMapper {user GetUserById (int id); } 2. 修改 User.xml 文件 , 确保 Espace de noms 属性值和接口的全限定名相同 , 且 id : :
<mapper namespace = "com.john.hbatis.mapper.iusemapper"> <select id = "getuserbyid"
3. 在 MybatisBasictest 类中添加测试方法 :
@Test public void queryInInterfacewaytest () {SQLSession Session = SQLSessionFactory.OpenSession (); IUserMapper Mapper = session.getMapper (iusermapper.class); // 如果 Espace de noms 和接口全限定名不一致 , 报 org.apache.ibatis.binding.bindingException: Type Interface com..iuseMapper n'est pas connu du MappelRegistry 异常。 User user = mAper.GetUserById (1); log.info ("{}: {}", user.getName (), user.getAddress ()); } :
上面的实现是把 SQL 语句放在 XML 文件中 , 并通过一定的约束来保证接口能够在 XML 中找到对应的 SQL 语句;
还有一种方式是通过接口 + 注解 SQL 方式来交互数据:
1. 新建接口类 :
Package com.john.hbatis.mapper; import org.apache.ibatis.annotations.Select; import com.john.hbatis.model.user; Interface publique iUserMapper2 {@Select ({"SELECT * FROM` USER` WHERE ID = # {id} "}) utilisateur getUserById (int id); } 2. 在 Configuration.xml ::
<mappers> <mappeur /> </mappers>
:
sqlSessionFactory.getConfiguration (). AddMapper (iUserMapper2.class);
3. : :
IUserMapper2 Mappeur = Session.getMapper (iusermapper2.class);