MyBatis 笔记(一)——快速入门
来源:互联网 发布:室内装修设计软件 编辑:程序博客网 时间:2024/06/06 07:31
简介
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 官网
阅读全文
0 0
- MyBatis 笔记(一)——快速入门
- MyBatis学习笔记(一)——MyBatis快速入门
- # MyBatis学习笔记(一)快速入门
- Mybatis快速入门——Mybatis学习总结(一)
- myBatis学习笔记(1)——快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- 度度熊的01世界
- #14
- 2016中国大学生程序设计竞赛
- 多线程详解
- POJ 3740 Easy Finding 跳舞链模板
- MyBatis 笔记(一)——快速入门
- 一个小项目
- CodeForces
- Week2
- D
- 线段树
- 去电流程分析---之二
- JDK自带工具类
- RCNN学习笔记(0):rcnn简介