Mybatis简例

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层中的方法测试即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值