Mybatis 学习笔记
配置 MyBatis 环境
导入MyBaits依赖jar包
要使用 MyBatis, 需要mybatis-x.x.x.jar、mysql-connector-java-5.1.38-bin.jar 两个架包
创建 Mybatis 配置文件
在 src 下 创建 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>
<!-- 设置别名 -->
<typeAliases>
<package name="com.project.bean"/>
</typeAliases>
<!-- 默认环境 -->
<environments default="development">
<!-- 配置环境 -->
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<!-- 导入mapper文件 -->
<mappers>
<!-- <mapper resource="com/project/mapper/XXX.xml" /> -->
</mappers>
</configuration>
根据表创建实体Bean

在com.project.bean包下创建UserBean,提供 get、set方法。
package com.project.bean;
public class UserBean {
private int id;
private String name;
private String dept;
private String website;
private String phone;
// get、set方法
}
创建操作表的Dao接口
在com.project.dao包下创建 IUserDao接口,写一个通过 id 查找用户的方法。
package com.project.dao;
import com.project.bean.UserBean;
public interface IUserDao {
// 通过id查找用户信息
public UserBean findUserById(int id);
}
配置映射文件
在 com.project.mapper 包下面创建 UserMapper.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.project.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultMap="userResultMap">
select * from t_user where u_id = #{id};
</select>
<!-- 将查询结果映射到实体Bean -->
<resultMap id="userResultMap" type="UserBean">
<!-- 映射主键字段 -->
<id property="id" column="u_id" />
<!-- 映射普通字段 -->
<result property="name" column="u_name" />
<result property="dept" column="u_udept" />
<result property="website" column="u_website" />
<result property="phone" column="u_phone" />
</resultMap>
</mapper>
创建好了sql映射文件,需要在 Mybatis 中添加才能生效,在config中 <mappers>
标签中添加 <mapper resource="com/project/mapper/UserMapper.xml" />
<mappers>
<mapper resource="com/project/mapper/UserMapper.xml" />
</mappers>
解释上面的字段
<select>
查、<update>
改、<insert>
增、<delete>
删
namespace
是命名空间,可以任意写,待会会通过 namespace.id 来获取sql语句
parameterType
指定输入参数类型,只能是单个参数,如果是简单类型可以省略不写,想传入多个参数可以通过在接口对应方法的参数列表添加注解实现。
resultMap
查询结果map名
<resultMap>
将指定查询结果映射到实体Bean
resultMap 中 type
是类型名,如果没有在config.xml设置别名需要写类的全路径
resultMap 中 property
是Bean对象的属性,column
是sql 查询结果的字段名
通过读取config内容获取 Sqlsession对象
在 com.project.util 包下创建工具类 MybatisUtil,内容如下:
package com.project.util;
import java.io.IOException;
import java.io.InputStream;
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 MybatisUtil {
/**
* 获取SqlSession工厂对象
*
* @return
*/
public static SqlSessionFactory getSqlSessionFactory() {
// 加载配置文件
String resource = "config.xml";
InputStream inputStream = null;
SqlSessionFactory fa = null;
try {
// 读取配置文件
inputStream = Resources.getResourceAsStream(resource);
// 构造Sqlsession的工厂对象
fa = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
return fa;
}
/**
* Session 不自动提交事务
*
* @return
*/
public static SqlSession getsession() {
SqlSessionFactory fa = getSqlSessionFactory();
SqlSession session = fa.openSession();
return session;
}
/**
*
* @param boo true: Session 自动提交事务
* @return
*/
public static SqlSession getsession(boolean boo) {
SqlSessionFactory fa = getSqlSessionFactory();
SqlSession session = fa.openSession(boo);
return session;
}
}
实现 IUserDao 接口
在 com.project.dao.impl 包下,创建UserDaoImpl类并实现IUserDao接口,内容如下:
package com.project.dao.impl;
import org.apache.ibatis.session.SqlSession;
import com.project.bean.UserBean;
import com.project.dao.IUserDao;
import com.project.util.MybatisUtil;
public class UserDaoImpl implements IUserDao {
@Override
public UserBean findUserById(int id) {
// 获取session
SqlSession session = MybatisUtil.getsession(true);
UserBean user = null;
try {
// 通过 namespace.id 定位需要sql语句
user = session.selectOne("com.project.mapper.UserMapper.findUserById", id);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return user;
}
}
还有另一种实现方式,这种方式有两个要求,命名空间的值与接口全路径一致,sql语句id与接口方法名一致
<mapper namespace="com.project.dao.IUserDao">
<select id="findUserById" parameterType="int" resultMap="userResultMap">
select * from t_user where u_id = #{id};
</select>
<-- 省略部分 -->
</mapper>
package com.project.dao.impl;
import org.apache.ibatis.session.SqlSession;
import com.project.bean.UserBean;
import com.project.dao.IUserDao;
import com.project.util.MybatisUtil;
public class UserDaoImpl implements IUserDao {
// @Override
// public UserBean findUserById(int id) {
// // 获取session
// SqlSession session = MybatisUtil.getsession(true);
// UserBean user = null;
// try {
// // 通过 namespace.id 定位需要sql语句
// user = session.selectOne("com.project.mapper.UserMapper.findUserById", id);
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// session.close();
// }
// return user;
// }
@Override
public UserBean findUserById(int id) {
// 获取session
SqlSession session = MybatisUtil.getsession(true);
IUserDao dao = session.getMapper(IUserDao.class);
UserBean user = null;
try {
user = dao.findUserById(id);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return user;
}
}
编写测试函数测试
package com.project.test;
import com.project.bean.UserBean;
import com.project.dao.IUserDao;
import com.project.dao.impl.UserDaoImpl;
public class TestMain {
public static void main(String[] args) {
IUserDao dao = new UserDaoImpl();
UserBean user = dao.findUserById(1);
System.out.println(user);
}
}
测试结果

查询成功。。。
网友评论