简介
什么是MyBatis?
MyBatis是支持定制化SQL、存储过程以及高级映射的优秀持久层框架。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或者注解,将接口和Java和POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
安装
要使用MyBatis,只需要将mybatis-x.x.x.jar文件置于classpath就可以了。
jar包下载地址为:https://github.com/mybatis/mybatis-3/releases
例子,使用eclipse+MySql
建立java项目并导入所需要的jar包
其中必需的jar为:
- mybatis-3.4.4.jar:MyBatis包
- mysql-connector-java-5.1.43-bin.jar:mysql的驱动包
mybatis使用的是3.4.4版本、jdbc使用的是5.1.43版本(版本不重要)
数据库建立表格
MyBatis的配置文件
在src根目录建立mysql的配置文件与MyBatis的配置xml
mysql.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
#定义初始连接数
jdbc.initialSize=0
#定义最大连接数
jdbc.maxActive=20
#定义最大空闲
jdbc.maxIdle=20
#定义最小空闲
jdbc.minIdle=1
#定义最长等待时间
jdbc.maxWait=60000
mybatis.cfg.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="mysql.properties" />
<!-- 配置myBatis运行环境 -->
<environments default="guybatis">
<environment id="guybatis">
<!-- JDBC代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3种数据源类型: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>
</configuration>
建立Bean类
class name: UserBean.java package name: com.guy.mybatis.beans
package com.guy.mybatis.beans;
import java.util.Date;
public class UserBean {
private Integer id;
private String username;
private Date birthday;
private char sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "UserBean [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex
+ ", address=" + address + "]";
}
}
建立操作数据库的接口类与映射xml文件
interface name: UserMapper.java package name: com.guy.mybatis.mapper
package com.guy.mybatis.mapper;
import java.util.List;
import com.guy.mybatis.beans.UserBean;
public interface UserMapper {
// 插入UserBean到数据库
public int insertUser(UserBean user);
// 通过id更新数据
public int updateUserById(UserBean user, int id);
// 通过id删除数据
public int deleteUserById(int id);
// 通过id查询数据
public UserBean selectUserById(int id);
// 得到所有的数据
public List<UserBean> selectAllUser();
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.guy.mybatis.mapper.UserMapper">
<!-- 自定义返回结果集合 -->
<resultMap type="UserBean" id="userMap">
<!-- 定义Bean属性与表属性的映射关系 -->
<id property="id" column="id" javaType="java.lang.Integer" />
<result property="username" column="username" javaType="java.lang.String" />
<result property="birthday" column="birthday" javaType="java.util.Date" />
<result property="sex" column="sex" javaType="java.lang.Character" />
<result property="address" column="address" javaType="java.lang.String" />
</resultMap>
<!-- 定义增删除查改的sql -->
<!-- useGeneratedKeys="true":仅对insert有用,主键自增 -->
<!-- keyProperty:仅对insert有用,设定主键 -->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into user(username, birthday, sex, address) values
(#{username}, #{birthday}, #{sex}, #{address})
</insert>
<!-- parameterType:查询时使用的条件参数类型 -->
<!-- resultType:指查询结果返回使用的结果集类型 -->
<update id="updateUserById" parameterType="int">
update user set
username=#{username}, birthday=#{birthday}, sex=#{sex},
address=#{address} where id=#{id}
</update>
<delete id="deleteUserById" parameterType="int">
delete from user where
id=#{id}
</delete>
<select id="selectUserById" parameterType="int" resultMap="userMap">
select * from user where id=#{id}
</select>
<select id="selectAllUser" resultMap="userMap">
select * from user
</select>
</mapper>
在mybatis.cfg.xml中注册UserMapper.xml与配置Bean类别名
<?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="mysql.properties" />
<!-- 给bean类起一个别名,在其它位置使用 -->
<typeAliases>
<!-- 单独配置,type放bean完整的路径(包名+类名) alias为类的别名 -->
<!-- <typeAlias type="com.guy.mybatis01.beans.UserBean" alias="UserBean" /> -->
<!-- 自动扫描指定包名下的类,将类名作为别名 -->
<package name="com.guy.mybatis.beans"/>
</typeAliases>
<!-- 配置myBatis运行环境 -->
<environments default="guybatis">
<environment id="guybatis">
<!-- JDBC代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3种数据源类型: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>
<!-- 单独配置某个bean mapper -->
<!-- <mapper resource="com/guy/mybatis/mapper/UserMapper.xml" /> -->
<!-- 自动扫描某包下面的mapper -->
<package name="com/guy/mybatis/mapper"/>
</mappers>
</configuration>
至此已经配置完成,使用步骤
private static SqlSessionFactory sessionFactory;
private SqlSession session;
private UserMapper userMapper;
try {
// 首先读取mybatis.cfg.xml得到Reader对象
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
// SqlSessionFactoryBuilder通过reader得到SqlSessionFactory
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 再通过SqlSessionFactory的openSession方法打开session得到SqlSession对象
session = sessionFactory.openSession();
// 拿到mapper进行调用
userMapper = session.getMapper(UserMapper.class);
} catch (IOException e) {
e.printStackTrace();
}
通过userMapper去调用里面的方法
userMapper.insertUser(user);