MyBatis 笔记(一)——快速入门
2017-08-13 19:37
645 查看
简介
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。入门
添加依赖
在使用 Mybatis 的时候,需要添加数据库驱动包和 Mybatis 包,以 MySQL 为例,Maven 依赖:<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency> </dependencies>
MyBatis 配置文件
使用 MyBatis 的时候需要一个 XML 配置文件,对数据源和实体进行配置:<?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useSSL=true"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <!-- 基于XML配置文件 --> <mapper resource="edu/wzm/mybatis/mapping/PersonMapper.xml"/> </mappers> </configuration>
Mapping 映射文件
在上一节 MyBatis 的配置文件中,看到了一个 mapper 标签,而它会指向一个映射文件:<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 例如:namespace="edu.wzm.mybatis.mapping.PersonMapper"(userMapper.xml文件去除后缀) --> <mapper namespace="edu.wzm.mybatis.mapping.PersonMapper"> <!-- 在select、insert、update、delete标签中编写查询的SQL语句, 设置标签的id属性值必须是唯一的,不能够重复。使用parameterType属性 指明查询时,使用的参数类型。resultType属性指明查询返回的结果集类型,resultType="edu.wzm.mybatis.domain.Person"就表示将查询 结果封装成一个Person类的对象返回,Person类就是person表所对应的实体类。 --> <insert id="insert" parameterType="edu.wzm.mybatis.domain.Person"> insert into person(name, age) values(#{name}, #{age}) </insert> <select id="getById" resultType="edu.wzm.mybatis.domain.Person"> select * from person where id = #{id} </select> <select id="getAll" resultType="edu.wzm.mybatis.domain.Person"> select * from person; </select> <update id="update" parameterType="edu.wzm.mybatis.domain.Person"> update person set age = #{age} where id = #{id} </update> <delete id="delete" parameterType="int"> delete from person where id = #{id} </delete> </mapper>
使用到的数据库表:
CREATE TABLE `person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `age` int(11) DEFAULT '-1', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
示例
在 Mapping 映射文件中,可以看到引入了一个实体类 Person:public class Person { private int id; private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person: [name=" + name + ", age=" + age + "]"; } }
在上述工作都完成的情况下,我们就可以编写访问数据库的 CRUD 代码:
public class PersonServices { public void add(){ Person person = new Person("Alice", 30); SqlSession sqlSession = MyBatisUtils.getSqlSession(true); /** * 映射sql的标识字符串。 * edu.wzm.mybatis.mapping.PersonMapper是PersonMapper.xml中mapper标签的namespace属性的值, * insert是insert标签的id属性值,通过update标签的id属性值就可以找到要执行的SQL。 */ int result = sqlSession.insert("edu.wzm.mybatis.mapping.PersonMapper.insert", person); System.out.println(result); sqlSession.close(); } public void getAll(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); List<Person> persons = sqlSession.selectList("edu.wzm.mybatis.mapping.PersonMapper.getAll"); System.out.println(persons); sqlSession.close(); } public void getById(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); Person person = sqlSession.selectOne("edu.wzm.mybatis.mapping.PersonMapper.getById", 1); System.out.println(person); sqlSession.close(); } public void update(){ Person person = new Person(); person.setId(7); person.setAge(27); SqlSession sqlSession = MyBatisUtils.getSqlSession(true); int result = sqlSession.update("edu.wzm.mybatis.mapping.PersonMapper.update", person); System.out.println(result); sqlSession.close(); } public void delete(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(true); int result = sqlSession.update("edu.wzm.mybatis.mapping.PersonMapper.delete", 6); System.out.println(result); sqlSession.close(); } }
之后,还要启动 MyBatis 的 SQLSession 才能真正使用 MyBatis,下面是 MyBatis 的工具类:
public class MyBatisUtils { public static SqlSessionFactory getSqlSessionFactory(){ InputStream is = MyBatisUtils.class.getClassLoader().getResourceAsStream(Const.MYBATIS_CONFIG_FILE); return new SqlSessionFactoryBuilder().build(is); } /** * @param autoCommit * true: 表示创建的SqlSession对象在执行完SQL之后会自动提交事务 * false: 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务 * @return */ public static SqlSession getSqlSession(boolean autoCommit){ return getSqlSessionFactory().openSession(autoCommit); } public static SqlSession getSqlSession(){ return getSqlSessionFactory().openSession(); } }
测试代码:
public class Driver { public static void main(String[] args)throws Exception{ PersonServices services = new PersonServices(); services.getById(); services.add(); services.update(); services.delete(); services.getAll(); } }
查看完整代码
参考文献
MyBatis 官网相关文章推荐
- mybatis学习笔记,简介及快速入门
- MyBatis学习笔记(二)快速入门
- MyBatis学习笔记(一)——MyBatis快速入门
- 优雅高效的MyBatis-Plus工具快速入门使用
- XML学习笔记,快速入门
- 安卓自学笔记第一章——快速入门
- MyBatis学习笔记(一)入门
- Struts2框架快速入门笔记
- SQLite-自学笔记(1)——快速入门
- MyBatis入门示例——MyBatis学习笔记之一
- MongoDB快速入门学习笔记3 MongoDB的文档插入操作
- 持久层框架:Mybatis快速入门
- 【MyBatis】——快速入门
- 【学习笔记】系列七:Lua 语言 15 分钟快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结_01_MyBatis快速入门
- MongoDB快速入门笔记(二)之MongoDB的概念及简单操作
- Spring Boot快速入门(五):使用MyBatis(注解形式)进行数据库操作
- MyBatis快速入门
- 2MyBatis入门--深入浅出MyBatis技术原理与实践(笔记)