MyBatis 简单入门
MyBatis是一流的持久性框架,支持自定义SQL,存储过程
和高级映射。 MyBatis消除了几乎所有的JDBC代码和手动设置
参数和结果检索。 MyBatis可以使用简单的XML或注释进行配置
并将图元,Map接口和Java POJO(普通的旧Java对象)映射到数据库记录.
运行环境:
MyBatis + Mariadb + Eclipse on Windows.
1. 下载Mariadb Windows 版本,不需要License, free, 不需要注册
https://downloads.mariadb.org/, 安装 HeidiSQL Client 端
2. mybatis-3.5.3, 从. https://github.com/mybatis/mybatis-3/releases 下载最新版本。
3. mariadb driver - 从https://downloads.mariadb.com/Connectors/java/connector-java-2.5.1/ 下载
MyBatis 的mapper 有两种实现方式, 一种是xml file, 另一种为Mapper java file 加上Select, Update Insert 等SQL注解。 以下以下以xml 为例。
配置:
-
生成一个java Project. 并把mariadb driver jar 包和mybatis jar 包放在Reference Library 里,(Build Path --> add to Build Path).
-
生成mybatis config xml file.
<?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>
<typeAliases>
<typeAlias alias="Person" type="com.batis.model.Person" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="org.mariadb.jdbc.Driver" />
<property name="url" value="jdbc:mariadb://localhost:3306/mysql" />
<property name="username" value="root" />
<property name="password" value="newsys" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/batis/config/PersonMapper.xml" />
</mappers>
</configuration>
用typeAliases的目的是直接用alias Person来代替POJO 的绝对路径(如com.batis.model.Person 类)
- 生成 Mapper file.
<?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.batis.config.PersonMapper">
<resultMap type="Person" id="personmap">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="address" property="address" />
<result column="birthday" property="birthday" />
</resultMap>
<select id="selectAll" resultMap="personmap">
select * from person
</select>
<select id="selectPerson" resultType="Person">
select * from person where id = #{id}
</select>
<insert id="insert" parameterType="map" useGeneratedKeys="true" keyProperty="id">
insert into person ( name, address, birthday) values (
#{name}, #{address}, #{birthday}
)
</insert>
</mapper>
注意事项:
- insert 操作时如果primary key 自动增加(Auto Increamented ) , 需要设置parameterType=“map” useGeneratedKeys=“true” keyProperty=“id”, keyProperty 声明key column name.
POJO类:
需要getter和setter 以及带成员变量的构造函数
public class Person {
public Person(int id, String name, String address, Date birthday) {
super();
this.id = id;
this.name = name;
this.address = address;
this.birthday = birthday;
}
private int id;
private String name;
private String address;
private Date birthday;
测试:
public class MybatisTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
String resource = "com/batis/config/MyBatisConfig.xml";
InputStream inputStream = null;
SqlSession session = null;
Date birthday = new Date(25, 2, 7);
Person p = new Person(2, "Tester", "China", birthday);
System.out.println("p = " + p);
try {
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
session = sqlSessionFactory.openSession();
Person p1 = session.selectOne("com.batis.config.PersonMapper.selectPerson", 1);
List<Object> list = session.selectList("com.batis.config.PersonMapper.selectAll");
for (Object obj : list)
{
System.out.println((Person)obj);
}
int ret = session.insert("com.batis.config.PersonMapper.insert", p);
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
try {
inputStream.close();
session.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
这样就可以了。
相对于Hibernet,Mybatis 非常简单,也容易上手,可以快速开发。还有Dynamic SQL 这个最强大的功能, 可以处理复杂的SQL 组合。