mybatis是apache提供的开源持久层框架,原本是ibatis,后来改名了,它是用于与数据库进行交互。在使用mybatis的时候,最主要的就是这个怎么用,除了配置一些与数据库建立联系的基本配置applicatonContext.xml(spring整合mybatis的配置文件),最主要的的就是xml映射配置(就是增删改查怎么写的配置)。
用mybatis的时候,我们要用到mapper映射,也就是说,一个项目有持久层dao,业务层service,表现层contraller,现在加上一个mapper映射。创建一个mapper包,在mapper包中,定义接口和xml映射配置,接口要和xml映射配置文件名字一样,一 一对应。比如:假设你给接口名取名为UserMapper.java,那么xml配置文件也得取名为UserMapper.xml。
如:
在接口中,我们可以定义一些方法,这些方法主要就是用来与数据库进行交互,就是跟数据库进行增删改查的那些操作。并且我们在持久层dao中要用到这些方法。整个程序的调用顺序是:controller(表现层)-->service(业务层)-->dao(持久层)-->mapper(映射关系层)。所以mapper接口中的方法都是我们在dao(持久层)要进行调用的。
在mybatis的xml配置中,分别有
新增(insert):
接口方法:( @Param("u")就是给参数取别名,在xml映射配置中我们才能方便去使用这个参数,使用方法就是: 别名.属性)
//@Param("u") 给参数定义个别名
int addUserBean(@Param("u") UserBean user);
xml映射配置:
insert into
t_user(login_name,user_name,user_pwd,age,gender,birthday,create_time)
values
(#{u.loginName},#{u.userName},#{u.password},#{u.age},#{u.gender},#{u.birthday},now());
对于修改和删除的操作,跟新增是一样的,他们在执行操作完成之后,返回的都是受影响的条数。
修改和删除(update、delete):
修改和删除最常用的属性也就是:id和parameterType,但是parameterType一般情况下不用指定,只要在接口方法的参数上加上@Param()注解就可以了,多个参数多个注解区分就是了。
查询(select)
查询与前面的增删改操作略有不同。比如:
接口方法:(注解含义请看上面)
UserBean findUserBeanByLoginNameAndPwd(@Param("loginName")String loginName,@Param("pwd")String pwd);
xml映射配置:
结果集映射:
查询标签
2、如果用的是resultType的话,传入的如果是对象,那么就要给sql语句的每列就要用as取别名,和对象的属性名保持一致;如果是Map,为列取了别名的就以别名为键,没取别名默认以列名作为键名。resultType可以是对象、Map、基本数据类型,引用数据类型。如果是后面两种的数据类型,把么查询结果返回只能是一个值,才能接收到。比如,只有一个数值返回,那么可以用int这些;只有一个字符串返回,可以用String;只有一个时间返回,可以用Data,最好写出类型的全路径,有些类型可以省略全路径,但是写上都不会报错。
四个标签的更多属性请参见mybatis官网:http://www.mybatis.org/mybatis-3/zh/index.html
完整的例子(单表):
在接口UserMapper中,定义了一些方法,在配置文件xml中去实现这些方法的增删改
public interface UserMapper {
//@Param("u") 给参数定义个别名
int addUserBean(@Param("u") UserBean user);
/**
* 批量新增
* @param users
* @return
*/
int addBatchUserBean(@Param("users") List users);
int updateUserBean(@Param("u") UserBean user);
int deleteUserBean(@Param("u") UserBean user);
/**
* 批量删除
* @param ids
* @return
*/
int deleteBatchUserBean(@Param("ids") int[] ids);
int deleteUserBeanById(@Param("id") Integer id);
UserBean getUserBeanById(@Param("id") Integer id);
UserBean findUserBeanByLoginNameAndPwd(@Param("loginName")String loginName,@Param("pwd")String pwd);
/**
* 多参数传递查询的方式一
* 按照对象传值
* @param user
* @return
*/
List findUserBeanByObject(@Param("u") UserBean user);
/**
* 多参数传递查询的方式二
* 按照Map传值
* @param map
* @return
*/
List findUserBeanByMap(@Param("m") Map map);
}
配置文件UserMaper.xml中,代码如下:
insert into
t_user(login_name,user_name,user_pwd,age,gender,birthday,create_time)
values
(#{u.loginName},#{u.userName},#{u.password},#{u.age},#{u.gender},#{u.birthday},now());
insert into
t_user(login_name,user_name,user_pwd,age,gender,birthday,create_time)
values
(#{u.loginName},#{u.userName},#{u.password},#{u.age},#{u.gender},#{u.birthday},now())
update t_user
login_name = #{u.loginName},
user_name = #{u.userName},
age = #{u.age},
gender = #{u.gender},
user_pwd = #{u.password},
birthday = #{u.birthday},
create_time = now(),
where id = #{u.id};
delete from t_user where id = #{u.id}
delete from t_user where id = #{id}
delete from t_user where id in
#{id}