MyBatis学习日志
导入依赖的jar包
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.10</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies>
创建一个po类
package com.yogurt.po;
import lombok.*;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Student {
private Integer id;
private String name;
private Integer score;
private Integer age;
private Integer gender;
}
编写mapper映射文件(编写SQL)
<!-- StudentMapper.xml --> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="test"> <select id="findAll" resultType="com.yogurt.po.Student"> SELECT * FROM student; </select> <insert id="insert" parameterType="com.yogurt.po.Student"> INSERT INTO student (name,score,age,gender) VALUES (#{name},#{score},#{age},#{gender}); </insert> <delete id="delete" parameterType="int"> DELETE FROM student WHERE id = #{id}; </delete> </mapper>
编写数据源properties文件
db.url=jdbc:mysql://192.168.183.129:3306/yogurt?characterEncoding=utf8
db.user=root
db.password=root
db.driver=com.mysql.jdbc.Driver
编写全局配置文件(主要是配置数据源信息)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置文件信息 --> <properties resource="properties/db.properties"></properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- 从配置文件中加载属性 --> <property name="driver" value="${db.driver}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.user}"/> <property name="password" value="${db.password}"/> </dataSource> </environment> </environments> <mappers> <!-- 加载前面编写的SQL语句的文件 --> <mapper resource="StudentMapper.xml"/> </mappers> </configuration>
编写dao类
package com.yogurt.dao; import com.yogurt.po.Student; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.List; public class StudentDao { private SqlSessionFactory sqlSessionFactory; public StudentDao(String configPath) throws IOException { InputStream inputStream = Resources.getResourceAsStream(configPath); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } public List<Student> findAll() { SqlSession sqlSession = sqlSessionFactory.openSession(); List<Student> studentList = sqlSession.selectList("findAll"); sqlSession.close(); return studentList; } public int addStudent(Student student) { SqlSession sqlSession = sqlSessionFactory.openSession(); int rowsAffected = sqlSession.insert("insert", student); sqlSession.commit(); sqlSession.close(); return rowsAffected; } public int deleteStudent(int id) { SqlSession sqlSession = sqlSessionFactory.openSession(); int rowsAffected = sqlSession.delete("delete",id); sqlSession.commit(); sqlSession.close(); return rowsAffected; } }
测试
public class SimpleTest { private StudentDao studentDao; @Before public void init() throws IOException { studentDao = new StudentDao("mybatis-config.xml"); } @Test public void insertTest() { Student student = new Student(); student.setName("yogurt"); student.setAge(24); student.setGender(1); student.setScore(100); studentDao.addStudent(student); } @Test public void findAllTest() { List<Student> all = studentDao.findAll(); all.forEach(System.out::println); } }
总结:
- 编写mapper.xml,书写SQL,并定义好SQL的输入参数,和输出参数
- 编写全局配置文件,配置数据源,以及要加载的mapper.xml文件
- 通过全局配置文件,创建SqlSessionFactory
- 每次进行CRUD时,通过SqlSessionFactory创建一个SqlSession
- 调用SqlSession上的selectOne,selectList,insert,delete,update等方法,传入mapper.xml中SQL标签的id,以及输入参数