Mybatis

是支持定制化的SQL,存储过程以及高级映射的优秀持久层框架。它封装了JDBC操作的很多细节,避免传统JDBC硬编码,xml配置或者注解,POJOD对象和数据库记录直接映射,使开发者只需要关注sql语句的本事,而不需注册驱动,创建连接等繁杂过程,Mybatis使用了ORM思想实现了结果集的封装。
中文官方网站:http://www.mybatis.org/mybatis-3/zh/index.html
Mybatis——HelloWorld - 图1

maven依赖

mvnrepository的官网https://mvnrepository.com/artifact/org.mybatis/mybatis查询mybatis依赖配置
Mybatis——HelloWorld - 图2
Mybatis——HelloWorld - 图3

maven项目的pom.xml中添加配置

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.mybatis</groupId>
  4. <artifactId>mybatis</artifactId>
  5. <version>3.4.5</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. <version>5.1.6</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>log4j</groupId>
  14. <artifactId>log4j</artifactId>
  15. <version>1.2.17</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>junit</groupId>
  19. <artifactId>junit</artifactId>
  20. <version>4.10</version>
  21. </dependency>
  22. </dependencies>

HelloWorld

创建表user

  1. CREATE TABLE `user` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(20) DEFAULT NULL,
  4. `birthday` date DEFAULT NULL,
  5. `gender` tinyint(1) DEFAULT NULL,
  6. `address` varchar(255) DEFAULT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB;

导入测试数据

  1. INSERT INTO `user` VALUES (1, '小王', '1990-05-01', 1, '北京');
  2. INSERT INTO `user` VALUES (2, '小红', '1992-03-28', 2, '武汉');
  3. INSERT INTO `user` VALUES (3, '小明', '1992-08-01', 1, '上海');
  4. INSERT INTO `user` VALUES (4, '小李', '1995-09-21', 2, '深圳');
  5. INSERT INTO `user` VALUES (5, '小强', '1998-01-03', 1, '广州');

创建实体类user.java

  1. public class User implements Serializable {
  2. private Integer id;
  3. private String name;
  4. private Date birthday;
  5. private int gender;
  6. private String address;
  7. public void setId(Integer id) {
  8. this.id = id;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public void setBirthday(Date birthday) {
  14. this.birthday = birthday;
  15. }
  16. public void setGender(int gender) {
  17. this.gender = gender;
  18. }
  19. public void setAddress(String address) {
  20. this.address = address;
  21. }
  22. public Integer getId() {
  23. return id;
  24. }
  25. public String getName() {
  26. return name;
  27. }
  28. public Date getBirthday() {
  29. return birthday;
  30. }
  31. public int getGender() {
  32. return gender;
  33. }
  34. public String getAddress() {
  35. return address;
  36. }
  37. @Override
  38. public String toString() {
  39. return "User{" +
  40. "id=" + id +
  41. ", name='" + name + '\'' +
  42. ", birthday=" + birthday +
  43. ", gender=" + gender +
  44. ", address='" + address + '\'' +
  45. '}';
  46. }
  47. }

创建dao接口

  1. public interface IUserDao {
  2. /**
  3. * 查询所有操作
  4. * @return
  5. */
  6. List<User> findAll();
  7. }

在resources创建文件夹mapper生成对象映射配置userMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="cn.bx.model.User">
  6. <select id="userList" resultType="cn.bx.model.User">
  7. select * from user
  8. </select>
  9. </mapper>

创建主配置文件mybatis.xml

XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!--配置环境-->
  7. <environments default="mysql">
  8. <environment id="mysql">
  9. <!--配置事务的类型-->
  10. <transactionManager type="JDBC"></transactionManager>
  11. <!--配置数据源(连接池)-->
  12. <dataSource type="POOLED">
  13. <property name="driver" value="com.mysql.jdbc.Driver"/>
  14. <property name="url" value="jdbc:mysql://127.0.0.1:3306/demo"/>
  15. <property name="username" value="root"/>
  16. <property name="password" value="baxiang"/>
  17. </dataSource>
  18. </environment>
  19. </environments>
  20. <!--创建映射关系-->
  21. <mappers>
  22. <mapper resource="com/mybatis/dao/IUserDao.xml"></mapper>
  23. </mappers>
  24. </configuration>

创建映射配置文件IUserDao.xml,包含了2个部分,第一是执行的SQL语句,第二是封装结果的实体类全限定类名

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.mybatis.dao.IUserDao">
  6. <select id="findAll" resultType="com.mybatis.domain.User">
  7. select * from user;
  8. </select>
  9. </mapper>

查询语句

  1. try {
  2. // 1 读取配置文件
  3. InputStream in = Resources.getResourceAsStream("mybatis.xml");
  4. // 2 创建SqlSessionFactory 工厂类
  5. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
  6. // 3 使用工厂生产SqlSession 对象
  7. SqlSession session = factory.openSession();
  8. // 4 使用SqlSession 创建Dao接口的代理对象
  9. IUserDao userDao = session.getMapper(IUserDao.class);
  10. // 5 使用代理对象执行方法
  11. List<User> users = userDao.findAll();
  12. for (User user :users){
  13. System.out.println(user);
  14. }
  15. // 6 释放资源
  16. session.close();
  17. in.close();
  18. }catch (Exception e){
  19. e.printStackTrace();
  20. }

或者可以通过selectList方法获取到映射sql

  1. List<User> users = session.selectList("com.mybatis.dao.IUserDao.findAll");

设置数据库属性文件db.properties

  1. driver=com.mysql.jdbc.Driver
  2. url=jdbc:mysql://192.168.1.112:3306/test
  3. username=root
  4. password=baxiang

修改mybatis的主配置文件

  1. <properties resource="db.properties"></properties>
  2. <environments default="development">
  3. <environment id="development">
  4. <transactionManager type="JDBC"/>
  5. <dataSource type="POOLED">
  6. <property name="driver" value="${driver}"/>
  7. <property name="url" value="${url}"/>
  8. <property name="username" value="${username}"/>
  9. <property name="password" value="${password}"/>
  10. </dataSource>
  11. </environment>
  12. </environments>

注解

注意需要移除xml的配置文件

  1. import org.apache.ibatis.annotations.Select;
  2. import java.util.List;
  3. public interface IUserDao {
  4. /**
  5. * 查询所有操作
  6. * @return
  7. */
  8. @Select("select * from user")
  9. List<User> findAll();
  10. }

修改mybatis.xml 配置文件

  1. <mappers>
  2. <mapper class="com.mybatis.dao.IUserDao"></mapper>
  3. </mappers>

Mapper

@Mappler 是 MyBatis 注解,MyBatis 运行时需要找到 mapper 文件,然后构建代理类来完
成整个功能的实现,

MapperScan

如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper 注解,比较
麻烦,解决这个问题用@MapperScan 注解。