步骤

  1. 有数据库
  2. 使用maven:需要mysql和mybatis坐标,还需要maven插件
  3. 创建实体类和数据库表对象对应(用于保存表中的一行数据)【注意不能导致没有无参构造方法】
  4. 创建持久层的dao接口,定义操作数据库的方法
  5. 创建mybatis使用的配置文件:即sql映射文件

写sql语句的,一般一个表一个sql映射文件。xml文件。文件需要写在接口所在的目录中,和接口的名字保持一致

  1. 创建mybatis的主配置文件

一个项目就一个主配置文件。提供了数据库的连接信息和sql映射文件的位置信息。一般放在resources目录下

  1. 创建使用mybatis类

映射文件

  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.liangwei.dao.StudentDao">
  6. <select id="selectStudents" resultType="com.liangwei.entity.Student">
  7. select id, name, email, age from student order by id
  8. </select>
  9. </mapper>

sql映射文件:写sql语句的,mybatis会执行这些sql语句
1. 指定约束文件

mybatis-3-mapper.dtd 是约束文件的名称,扩展名是dtd的
约束文件的作用: 用于限制当前出现的标签和组合必须符合mybatis的要求

  1. mapper 是当前文件的根标签,必须的

namespace:命名空间,唯一值,可以是自定义的字符串。使用dao接口的全限定名称

  1. 再当前文档中可以使用特定的标签,表示数据库的特定操作

    <select> 查询
    <update> 更新数据库的操作
    <insert> insert语句
    <delete> delete语句

  2. select语句:

    id属性:要执行的sql语法的唯一标识,mybatis会使用这个id的值来找到要执行的sql语句。可以自定义,但是要求使用接口中方法的名称
    resultType属性:表示结果类型,是sql语句执行得到ResultSet,然后遍历得到的每一行数据绑定的对象。值是类型的全限定名称

主配置文件

在resources目录下

  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. default:必须和某个environmentid值一样,就是告诉mybatis使用哪个数据库
  8. -->
  9. <environments default="myDev">
  10. <!--
  11. environment:一个数据库的配置信息,环境
  12. id属性:唯一值,自定义,表示环境的名称
  13. -->
  14. <environment id="myDev">
  15. <!--
  16. transactionManager: mybatis的事物类型,
  17. 两个可选值:【JDBC, MANAGED
  18. 1. JDBC mybatis底层调用的时JDBCConnection对象
  19. 2.MANAGED:把mybatis的事务处理委托交给其他的容器(一个服务器软件,一个框架)
  20. -->
  21. <transactionManager type="JDBC"/>
  22. <!-- 代表数据源,POOLED代表使用连接池-->
  23. <dataSource type="POOLED">
  24. <property name="driver" value="com.mysql.jdbc.Driver"/>
  25. <property name="url" value="jdbc:mysql://localhost:3306/mybatis_test"/>
  26. <property name="username" value="admin"/>
  27. <property name="password" value="admin"/>
  28. </dataSource>
  29. </environment>
  30. </environments>
  31. <mappers>
  32. <!-- 一个mapper标签,指定一个文件的位置
  33. ,从类路径开始的路径信息 target/classes(类路径)/....
  34. -->
  35. <mapper resource="com/liangwei/dao/StudetnDao.xml"/>
  36. </mappers>
  37. </configuration>

主要定义了数据库的配置信息,和sql映射文件的位置信息

主函数

  1. public static void main(String[] args) throws IOException {
  2. // 访问mybatis读取数据库数据
  3. // 1. 定义Mybatis主配置文件的名称,从类路径的根开始(target/classes/...)
  4. String config = "mybatis.xml";
  5. // 2. 读取config文件
  6. InputStream inputStream = Resources.getResourceAsStream(config);
  7. // 3. 创建SqlSessionFactoryBuilder对象
  8. SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
  9. // 4. 创建SqlSessionFactory对象
  10. SqlSessionFactory sqlSessionFactory = builder.build(inputStream);
  11. // 5. 【重要】获取SqlSession对象,从中获取SqlSession
  12. SqlSession sqlSession = sqlSessionFactory.openSession();
  13. // 6. 【重要】指定要执行的sqlId, 格式:namespace + '.' + id
  14. String sqlId = "com.liangwei.dao.StudentDao" + "." + "selectStudents";
  15. // 7 执行sql语句,通过sqlid
  16. List<Student> studentList = sqlSession.selectList(sqlId);
  17. // 8 输出结果
  18. studentList.forEach(stu -> System.out.println(stu));
  19. }

插入任务示例

【注意】MyBatis默认不是自动提交事务,所以在insert、update、delete后要手工提交事务

  1. 写接口 ```java public interface StudentDao {

    public List selectStudents(); // 插入学生记录的代码 public Integer insertStudent(Student student);

}

  1. 2. 修改映射文件
  2. ```java
  3. <insert id="insertStudent" >
  4. insert into student values (#{id}, #{name}, #{email}, #{age})
  5. </insert>
  1. 构造测试方法 ```java public class TestMyBatis {

// 测试方法 @Test public void testInsert() throws IOException { String config = “mybatis.xml”; // 2. 读取config文件 InputStream inputStream = Resources.getResourceAsStream(config); // 3. 创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 4. 创建SqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = builder.build(inputStream); // 5. 【重要】获取SqlSession对象,从中获取SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 6. 【重要】指定要执行的sqlId, 格式:namespace + ‘.’ + id String sqlId = “com.liangwei.dao.StudentDao.insertStudent”; Student student = new Student(); student.setName(“张飞”); student.setId(1003); student.setEmail(“zhangfei@163.com”); student.setAge(20); // 7 执行sql语句,通过sqlid Integer result = sqlSession.insert(sqlId, student);

  1. // 8 输出结果
  2. System.out.println(result);
  3. sqlSession.commit();
  4. }

}

  1. <a name="Y12gY"></a>
  2. ## 配置日志功能
  3. 在`mybatis.xml`文件中添加标签`<setting name="logImpl" value="STDOUT_LOGGING"/>`
  4. ```java
  5. <configuration>
  6. <!-- 添加该设置标签-->
  7. <settings>
  8. <setting name="logImpl" value="STDOUT_LOGGING"/>
  9. </settings>
  10. <!-- 环境配置:数据库的连接信息
  11. default:必须和某个environment的id值一样,就是告诉mybatis使用哪个数据库
  12. -->
  13. <environments default="myDev">
  14. <!--
  15. environment:一个数据库的配置信息,环境
  16. id属性:唯一值,自定义,表示环境的名称
  17. -->
  18. <environment id="myDev">
  19. ...