秒秒钟看懂MyBatis
2016-02-16 18:36
483 查看
最近做项目用到了MyBatis,之前没接触过,本以为它有多么高深呢,结果看完之后才发现So Easy,因为之前用过Hibernate,所以感觉它很容易理解。赶紧让我们看看它到底是个什么东西吧。
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
原理详解:
MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。
说明:
id:这个xml中的id与接口中的方法名相匹配
parameterType:是传入参数的类型,可以是String等常用类型,也可以是定义的实体
resultMap:是返回的结果集,本例子中的“UserMonitor”在开头已经配置(即配置返回实体与表结构的对应关系)
4、实体
一、快速普及
1、是什么
是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
Mybatis实现了接口绑定,使用更加方便。
对象关系映射的改进,效率更高
MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。
2、功能架构
3、执行流程
原理详解:
MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。
二、代码理解
1、业务逻辑层的调用
MyBatis一般应用于Dao层,所以我们从业务逻辑的调用开始看/* *用户管理-业务逻辑实现 */ @Service public class UserSericerImp implements UserSericer{ //自动注入Dao层的用户管理类 @Autowired private UserDao ud; //新增用户 @Override public long saveUser(UserMonitor um) { // TODO Auto-generated method stub return ud.saveUser(um); } //查询所有用户 @Override public List<UserMonitor> listUser() { // TODO Auto-generated method stub List<UserMonitor> list = ud.listUser(); return list; } //更新用户 @Override public long upUser(UserMonitor um) { // TODO Auto-generated method stub return ud.upUser(um); } //删除用户 @Override public long delUser(long id) { // TODO Auto-generated method stub return ud.delUser(id); } }
2、Dao层的接口
/* *用户管理-Dao层接口 */ @Component("UserDao") public interface UserDao { /** * login */ public UserMonitor login(UserMonitor um); /** * 新增用户 * @param um * @return */ public long saveUser(UserMonitor um); /** * 展示USER * */ public List<UserMonitor> listUser(); /** * 修改 * @param um * @return */ public long upUser(UserMonitor um); /** * 删除 * @param um * @return */ public long delUser(long id); }
3、Dao层实现
这里需要注意的是,Dao层是通过xml配置文件实现的,而且里边的方法名一定不能重复(注意:即使在不同的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.jiedaibao.fundmonitor.dao.mapper.UserDao"> <!-- 配置返回实体与表结构的对应关系 --> <resultMap id="UserMonitor" type="com.jiedaibao.fundmonitor.dao.domain.UserMonitor"> <!-- 实体名称及位置 --> <!-- 主键 --> <id column="id" property="id" jdbcType="INTEGER" /> <!-- 用户名 --> <result column="username" property="username" /> <!-- 密码 --> <result column="password" property="password" /> </resultMap> <!-- 查询所有用户 --> <select id="listUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor" resultMap="UserMonitor"> select id,username,password from t_user order by username </select> <!-- 添加新用户 --> <insert id="saveUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor"> <![CDATA[INSERT INTO t_user (username,password) VALUES(#{username},#{password})]]> </insert> <!-- 更新用户 --> <update id="upUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor"> <![CDATA[UPDATE t_user ]]> <set> <if test="username != null and username != ''"> <![CDATA[username=#{username}]]> </if> <if test="password != null and password != ''"> <![CDATA[`password`= #{password}]]> </if> </set> <where> <![CDATA[ id=#{id}]]> </where> </update> <!-- 删除用户 --> <delete id="delUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor"> <![CDATA[DELETE FROM t_user ]]> <where> <![CDATA[id=#{id}]]> </where> </delete> </mapper>
说明:
id:这个xml中的id与接口中的方法名相匹配
parameterType:是传入参数的类型,可以是String等常用类型,也可以是定义的实体
resultMap:是返回的结果集,本例子中的“UserMonitor”在开头已经配置(即配置返回实体与表结构的对应关系)
4、实体
/* * 用户实体 */ public class UserMonitor { private Long id; //自增id private String username;//用户名 private String password; //密码 }
总结:
我们现在只是简单了解了一下MyBatis,在开发中完全可以快速上手了,但是其他如事务、缓存、存储过程、动态sql、映射等,我们就不在介绍了,感兴趣的朋友可以自己看看。相关文章推荐
- U盘、系统备份
- Andriod5.0以上APP打开白屏(无响应)
- Ionic基础——ion-tap选项卡及路由结合ion-tap详解
- 列举你能想到的UNIX信号,并说明信号用途
- hive函数总结-字符串函数
- Y - Design T-Shirt(第二季水)
- Android更好的扩展性更强网络请求框架----okhttp
- 混合式开发接口文档
- [LintCode]Insertion Sort List
- android 通过包名杀死进程
- 215. Kth Largest Element in an Array LeetCode
- 【React Native开发】React Native控件之WebView组件详解以及实例使用(22)
- Codeforces Round #127 (Div. 1) C. Fragile Bridges dp
- redis 数据类型详解 以及 redis适用场景场合
- 从一个实例(整数幂指数)进行算法时间复杂度的分析
- Android消息机制
- FragmentManage详解
- JS中数组Array的用法示例用法详解
- Linux实现的IEEE 802.1Q VLAN
- 用HOG+SVM在Inria数据集上做行人检测与评测