Mybatis简例
1.全局配置文件
<?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="db.properties"></properties>
// 日志输出配置
<settings>
<setting name = "logImpl" value = "LOG4J" />
</settings>
<typeAliases>
<typeAlias type="com.etoak.entity.Student" alias="student"></typeAlias>
</typeAliases>
// 配置数据库环境
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${m.driver}"/>
<property name="url" value="${m.url}"/>
<property name="username" value="${m.username}"/>
<property name="password" value="${m.password}"/>
</dataSource>
</environment>
</environments>
// Mapper映射文件
<mappers>
<mapper resource="studentMapper.xml"></mapper>
</mappers>
</configuration>
2.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 = "com.etoak.mapper.StudentMapper">
<!--
1) parameterType 输出参数类型
2) resultType 返回数据类型
3) id 与Mapper接口中方法名字一致
4) #{ } 相当于 JDBC中给 ? 赋值
5) 返回类型直接映射到实体类中,如果数据库表中字段名和实体类中属性名相同,
可以直接映射成功,否则需要通过别名的方式与实体类中属性名保持一致
-->
// 插入语句
<insert id="addStudent" parameterType="student">
insert into tb_stu(s_name, s_age, s_birth, s_email, s_schid)
values(#{name}, #{age}, #{birth}, #{email}, #{schid})
</insert>
// 查询语句
<select id="queryAll" resultType="student">
select sid id, s_name name, s_age age, s_birth birth, s_email email, s_schid schid
from tb_stu
</select>
// 更新语句
<update id="updateStudent" parameterType="student">
update tb_stu
set s_name = #{name}, s_age = #{age}, s_birth = #{birth}, s_email = s_email, s_schid = #{schid}
where sid = #{id}
</update>
// 删除语句
<delete id="deleteStudent" parameterType="int">
delete from tb_stu
where sid = #{id}
</delete>
</mapper>
3.工厂类加载配置文件,生成数据库连接
public class SessionFactory {
private static SqlSessionFactory f;
private SessionFactory() {}
static {
try {
// 读取配置文件信息
Reader reader = Resources.getResourceAsReader("config.xml");
// 创建SqlSessionFactory对象
f = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
// 返回SqlSession对象方法
public static SqlSession getSession() {
return f.openSession();
}
}
4.Mapper层
mapper层相当于dao层
public interface StudentMapper {
public void addStudent(Student student);
public List<Student> queryAll();
public void updateStudent(Student student);
public void deleteStudent(int id);
}
5. Service层
service层中方法相当于实现了mapper接口中的方法
mapper接口中对数据库操作的不同方法名与Mapper映射文件中id相同,其具体的sql语言在xml文件中
public class StudentService {
public void regStudent(Student student){
SqlSession session = null;
try {
// 通过工厂类获取SqlSession对象
session = SessionFactory .getSession();
// Mybatis 使用动态代理的方式实现Student Mapper类型的接口对象
StudentMapper dao = session.getMapper(StudentMapper.class);
// 调用Mapper接口中的方法
dao.addStudent(student);
// 提交SqlSession
session.commit();
}catch (Exception e) {
e.printStackTrace();
if (session != null)
// 回滚
session.rollback();
}finally {
if (session != null)
// 关闭SqlSession
session.close();
}
}
public List<Student> queryAll() {
SqlSession session = null;
try {
session = SessionFactory .getSession();
StudentMapper dao = session.getMapper(StudentMapper.class);
List<Student> studentList = dao.queryAll();
session.commit();
return studentList;
}catch (Exception e) {
e.printStackTrace();
if (session != null) {
session.rollback();
}
}finally {
if (session != null) {
session.close();
}
}
return null;
}
public void update(Student student) {
SqlSession session = null;
try {
session = SessionFactory .getSession();
StudentMapper dao = session.getMapper(StudentMapper.class);
dao.updateStudent(student);
session.commit();
} catch (Exception e) {
e.printStackTrace();
if (session != null) {
session.rollback();
}
} finally {
if (session != null) {
session.close();
}
}
}
public void deleteStudent(int id) {
SqlSession session = null;
try {
session = SessionFactory .getSession();
StudentMapper dao = session.getMapper(StudentMapper.class);
dao.deleteStudent(id);
session.commit();
}catch (Exception e) {
e.printStackTrace();
if (session != null) {
session.rollback();
}
}finally {
if (session != null) {
session.close();
}
}
}
}
6.测试
调用Service层中的方法测试即可