MyBatis学习-入门篇
一、MyBatis 介绍
MyBatis 是支持普通的 SQL 查询,存储过程和高级映射的优秀持久层框架,可以进行更为细致的 SQL 优化,减少查询字段。几乎消除了所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO (Plain Old Java Objects,普通的 Java 对象) 映射成数据库中的记录。
二、如何使用 MyBatis
我这里使用的 maven,所有目录也是基于 maven 的目录结构来说的。
1. 所需的 JAR 包
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
2. 创建数据库表
CREATE TABLE person ( personId int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', nickName varchar(200) DEFAULT NULL COMMENT '姓名', age int(11) DEFAULT NULL COMMENT '年龄', sex int(11) DEFAULT NULL COMMENT '性别', birthday timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '出生日期', PRIMARY KEY (personId) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
3. 创建一个实体类 Person.java
package com.enh.bean; import java.util.Date; public class PersonBean { private Integer personId; private String nickName; private Integer age; private Integer sex; private Date birthday; public PersonBean() { } public PersonBean(String nickName, Integer age, Integer sex, Date birthday) { super(); this.nickName = nickName; this.age = age; this.sex = sex; this.birthday = birthday; } public Integer getPersonId() { return personId; } public void setPersonId(Integer personId) { this.personId = personId; } ... get() set() 方法
public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "PersonBean [personId=" + personId + ", nickName=" + nickName + ", age=" + age + ", sex=" + sex + ", birthday=" + birthday + "]"; } }
4. 创建Dao层接口类 PersonMapper.java
package com.enh.mapper; import com.enh.bean.PersonBean; public interface PersonMapper { /** * @Description: 新增 * @Author: * @CreateTime: * @param personBean * @return * @throws Exception */ public Integer insert(PersonBean personBean) throws Exception; }
5. 在 classpath 下创建 MyBatis 映射文件 com/enh/mapper/PersonMapper.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="com.enh.mapper.PersonMapper"> <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="personBean"> INSERT INTO person ( nickName, age, sex, birthday ) VALUES ( #{nickName}, #{age}, #{sex}, #{birthday} ) </insert> </mapper>
6. 在classpath下创建 MyBatis 配置文件 mybatis-config.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> <!-- 引入外部文件 --> <properties resource="application.properties"></properties> <!-- 为Java Bean起别名 --> <typeAliases> <typeAlias alias="personBean" type="com.enh.bean.PersonBean" /> </typeAliases> <!-- 配合MyBatis运行环境 --> <environments default="cybatis"> <environment id="cybatis"> <!-- 使用JDBC的提交和回滚来管理事物 --> <transactionManager type="JDBC"/> <!-- mybatis提供了三种数据源类型,分别是 POOLED UNPOOLED JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 映射文件 --> <mappers> <mapper resource="com/enh/mapper/PersonMapper.xml" /> </mappers> </configuration>
7. 在 classpath 路径下创建参数集文件 application.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/erim
jdbc.username=root
jdbc.password=root
8. 需要建立一个初始化 SqlSession 的工具类
package com.enh.common; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class DBTools { public static SqlSessionFactory sessionFactory; static { try { // 使用MyBatis的Resources类加载配置文件 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); // 构建SessionFactory实例 sessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSession getSqlSession() { return sessionFactory.openSession(); } }
9. 测试
public static void main(String[] args) { SqlSession sqlSession = null; try { // 获取sqlSession sqlSession = DBTools.getSqlSession(); PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); PersonBean personBean = new PersonBean("张三", 18, 1, new Date()); personMapper.insert(personBean); System.out.println(personBean.toString()); } catch (Exception e) { e.printStackTrace(); } }