主要搭建过程
1. Pom.xml 文件中加入 mybatis 和数据库依赖 , 这里使用 mysql:
<Properts> <mybatis.version> 3.2.3 </mybatis.version> <ysql.version> 5.1.26 </mysql.version> <slf4j.api.version> 1.7.5 </slf4j.api.version> <ToTng.>> 3.7.7 </stsnnnnnnin> <ostng.> >.pertsion> 6.7.7 </strion> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- Database driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <versão> $ {mysql.version} </version> </dependency> <!-mybatis 启动要加载 log4j-> <pendency> <puryid> org.slf4j </groupiD> <TRATIFACTID> slf4j-log4j12 </stifactId> <siers> $ {slf4j.api.verso.versherssers <PuerpId> org.testng </frugiD> <TRAFACTID> testng </stifactId> <versão> $ {testng.version} </versão> </dependency> </dependências>
2. 在类路径下创建 mybatis 的配置文件 Configuration.xml
<? xml versão = "1.0" Encoding = "utf-8"?> <! Doctype Configuration public "-// mybatis.org//dtd config 3.0 //" "http://mybatis.org/dtd/mybatis-3-config.dias"> alias = "usuário" tipo = "com.john.hbatis.model.user" /> < /typeAliases> <ambientes default = "Development"> <ambiente id = "desenvolvimento"> <transactionManager type = "jdbc" /> <DataSource type = "pooled"> <!-数据源-> name = "" name = "url" value = "jdbc: mysql: // localhost: 3306/hbatis"/> <names name = "userr name" value = "root"/> <names name = "senha" value = "123456"/> </datasource> </ambiente> </ambientes> <pappers> <! Resource = "com/John/hbatis/model/user.xml"/> </mappers> </figuration>
3. 执行创建数据库和表的 SQL:
- Crie o banco de dados chamado 'hbatis'. - Não há problema em usar `, não ok de usar 'ou" ao redor do nome do banco de dados para impedir que ele seja interpretado como uma palavra-chave, se possível. Int (11) NULL NULL, `Endereço` Varchar (200) NULL, chave primária (` id`)) MOTOR = Innodb Auto_INCREMMENT = 2 CHARSET PADRÃO = UTF8;
4. Com.John.hbatis.model.user 类:
Public class Usuário {private int id; nome de string privado; idade de cordas privadas; endereço de string privado; // getters e setters são omitidos // 如果有带参数的构造器 , 编译器不会自动生成无参构造器。当查询需要返回对象时 , , 框架用反射来调用对象的无参构造函数 , 导致异常: java.lang.nosuchmethodException: com.john.hbatis.model.user. this.address = endereço; } usuário público (nome da string, idade int, endereço da string) {this.name = name; this.age = idade; this.address = endereço; }}com/john/hbatis/modelo 路径下的 user.xml
<? xml versão = "1.0" coding = "utf-8"?> <! namespace = "com.john.hbatis.model.userMapper"> <select id = "getUserById" parameterType = "int" resulttype = "user"> selecione * de `user` where id = #{id} </select> <//Mapper>
5. 测试类:
classe pública mybatisbasictest {private static final logger log = loggerFactory.getLogger (mybatisbasictest.class); SQLSession SQLSessionFactory privado; Leitor de leitor estático privado; @BeFeFeClass public static void Initial () {try {reader = Resources.getResourCeasReader ("Configuration.xml"); sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (leitor); } catch (ioexception e) {log.error ("Erro jogado ao ler a configuração: {}", e); } finalmente {if (leitor! = null) {try {reader.close (); } catch (ioexception e) {log.error ("Erro jogado ao fechar o leitor: {}", e); }}}} @Test public void Querytest () {SqlSession Session = sqlSessionFactory.opensssion (); Usuário Usuário = (Usuário) session.SelectOne ("com.john.hbatis.model.userMapper.getUserbyId", 1); log.info ("{}: {}", user.getName (), user.getAddress ()); }}以接口方式交互数据
上面的环境搭建是采用 SqlSession 的通用方法并强制转换的方式 , 存在着转换安全的问题:
Usuário Usuário = (Usuário) session.SelectOne ("com.john.hbatis.model.userMapper.getUserbyId", 1);可以采用接口加 SQL 语句的方式来解决 , SQL 语句理解为是接口的实现:
1. 新建接口类:
pacote com.john.hbatis.mapper; importação com.john.hbatis.model.user; interface pública iUserMperpper {user getUserById (int id); } 2. 修改 user.xml 文件 , 确保 namespace 属性值和接口的全限定名相同 , 且 id 属性值和接口方法名相同:
<Mapper Namespace = "com.john.hbatis.mapper.iuserMapper"> <select id = "getUserbyId"
3. 在 MybatisBasictest 类中添加测试方法 ::
@Test public void queryInInterfacewayTest () {SqlSession Session = sqlSessionFactory.opensssion (); IUserMerpApper Mapper = session.getMapper (iuserMapper.class); // 如果 namespace 和接口全限定名不一致 , 报 org.apache.ibatis.binding.bindingException: type interface com..usermapper não é conhecido pelo maperegistry 异常。 usuário user = mapper.getUserById (1); log.info ("{}: {}", user.getName (), user.getAddress ()); }附
上面的实现是把 sql 语句放在 xml 文件中 , 并通过一定的约束来保证接口能够在 xml 中找到对应的 sql 语句;
还有一种方式是通过接口+注解 SQL 方式来交互数据:
1. 新建接口类:
pacote com.john.hbatis.mapper; importar org.apache.ibatis.annotações.Select; importação com.john.hbatis.model.user; interface pública iUserMApper2 {@select ({"selecione * de` user` where id = #{id} "}) usuário getUserById (int id); } 2. 在 Configuration.xml 文件中加入:
<Mappers>
或在初始化语句中加入
sqlSessionFactory.getConfiguration (). addmapper (iuserMapper2.class);
3. 相应修改上面的测试方法:
IUserMApper2 Mapper = session.getMapper (iUserMApper2.Class);