MyBatis是一个优秀的持久层框架,它主要是完成对操作数据库的过程进行封装。它以xml或注解的方式将要执行的各种statement配置起来,并通过Java对象和statement中的sql进行映射生成最终执行的sql语句,最后让mybatis框架进行sql并将结果映射成Java对象并返回。
其中在mybatis的配置文件以及dao层的配置文件需要认真对待,在mybatis的配置文件中需要完成数据库连接的路劲及配置信息,并配置好mapper映射关系的文件路径,例如:
在dao层的xml文件中,我们需要设置好dao接口的路径,在xml文件中编写我们的sql功能语句,即相应的增删改查。
其中需要注意的地方有resultType和resultMap的用法,resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。 如果sql查询到的字段与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中,resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
在sql语句中的#或$用于接收dao接口传递的参数,其中#是以注入的方式放入了sql语句,$是以拼接的方式放入了sql语句。
dao层mapper的xml文件:
update students set sage=#{age},sname=#{name} where
sid=#{id}
insert into students
values(#{students.sid},#{students.sage},#{students.sname})
select * from students
SELECT * from students s
LEFT JOIN scores ss ON s.sid=ss.sid
select * from students s
join objs o on s.sid=o.sid
select * from students
and sage > #{min} and sage < #{max}
and xuefen > #{xuefen}
and sname like concat(#{name},'%')
select * from students s join scores ss on
s.sid=ss.sid where 1=1
and zong > #{zong}
and xuefen > #{xuefen}
and sname like '张%'
update students
xuefen=#{xuefen},
sname=#{sname}
update students
xuefen=#{xuefen}
sid=#{sid}
select * from students where sage in
#{ages}
select * from students where sage in
#{ages}
select * from students where xuefen > #{xuefen} and sage in
#{age}
id="stu">
id="ss"> ofType="model.Score">
id="so"> ofType="model.Wupin">
dao接口的写法:
public interface StudentDao {
//修改方法
int change1(@Param("id")int sid,@Param("age")int sage,@Param("name")String sname);
//通过id查询
Student queryStuById(@Param("id1")int sid);
//添加方法
int addStu1(@Param("students")Student stu);
//查询所有
List
//双表查询,显示多列
List
//双表查询,显示多行
List
//传入对象数组
List
//传入list集合
List
//传入map集合
List
//修改信息(使用trim标签)
int gaifen(@Param("xuefen")String xuefen,@Param("sname")String sname,@Param("sid")String sid);
//修改信息(使用set标签)
int gaifen1(@Param("xuefen")String xuefen,@Param("sid")String sid);
//查询信息(使用choose标签)
List
//查询信息(使用where标签)
List
}
其中的@Param是注解,方便mapper文件引用传入的参数,#{}和${}都可以使用,但是不用这个注解,使用${}会报错,此时只能用#{}。