一、parameterType属性
在Mapper.xml文件中的<select> <delete>等标签中的parameterType属性可以控制参数类型
SqlSession 的 selectList()和 selectOne()的第二个参数和 selectMap()的第三个参数都表示方法的参数
People p = session.selectOne("a.b.selById",1);
System.out.println(p);
<select id="selById" resultType="com.xijian.pojo.People" parameterType="int">
select * from people where id=#{0}
</select>
1)在xml配置文件中,使用#{}获取参数内容
使用索引,从0开始,0表示第一个参数。
可以使用#{param1}表示第一个参数
如果只有一个参数(基本数据类型或String),MyBatis对#{}里面内容没有要求,只要写内容即可。
如果参数是个对象,#{属性名}
如果参数是map,写成#{key}
2)#{}与${}的区别
#{}获取参数的内容支持,在sql语句中实际上以 ? 占位符方式实现
${} 使用的是字符串拼接,不使用 ? 占位符,默认找${内容} 中内容的get/set方法,如果中间写数字,那就是一个数字。
3)如果在xml文件中出现"<"">"双引号等特殊字符可以使用XML文件转译标签(xml文件自身拥有的)
<![CDATA[ select * from t_user2 where id > 1 ]]>
二、MyBatis实现数据库分页查询
在Mapper.xml配置文件中,不允许通配符"?"在关键字前后进行数学运算,所以limit后的数字需要在java代码中计算完成后再传递到mapper.xml文件中
//显示几个
int pageSize = 2;
//第几页
int pageNumber = 2;
//如果希望传递多个参数,可以使用对象或 map
Map<String,Object> map = new HashMap<>();
map.put("pageSize", pageSize);
map.put("pageStart", pageSize*(pageNumber-1));
List<People> p =session.selectList("a.b.page",map);
在mapper.xml文件中
<select id="page" resultType="com.xijian.pojo.People" parameterType="map">
select * from people limit #{pageStart},#{pageSize}
</select>
三、别名的使用
在mapper.xml中,可能会多次用到一个类的完全限定名,这时候可以在MyBatis.xml配置文件中给某个类或包配置别名
1)给某个类配置别名
<typeAliases>
<typeAlias type="com.xijian.pojo.People" alias="peo"/>
</typeAliases>
在mapper.xml中就可以直接使用别名来代替类的完全限定名
<select id="page" resultType="peo" parameterType="map">
select * from people limit #{pageStart},#{pageSize}
</select>
2)给某个包下所有类其别名,别名为类名,不区分大小写
<typeAliases>
<package name="com.bjsxt.pojo" />
</typeAliases>
在mapper.xml中通过类名引用
<select id="page" resultType="People" parameterType="map">
select * from people limit #{pageStart},#{pageSize}
</select>
四、事务处理
1)首先谈一下三个概念
1.功能:从应用程序角度出发,软件具有的叫功能
2.业务:完成功能时的逻辑,对应Service中一个方法
3.事务:从数据库角度出发,完成业务时需要执行的SQL集合,统称一个事务。
所以说事务回滚就是在一个事务中,执行某些SQL语句出错,希望回归到执行这些语句之前的状态,以保证数据库数据的完整性。
2)在MyBatis中默认关闭了JDBC的自动提交事务功能。
1.每一个SqlSession对象都是默认不自动提交事务
2.提交事务的时候需要手动用session.commit()提交事务
3.可以通过session.openSession(true)自动提交事务
3)Mybatis底层是对JDBC的封装
1.JDBC中executeUpdate()执行新增,删除,修改的SQL,返回值为int,表示受影响的行数
2.MyBatis中<insert> <delete> <update>标签没有resultType属性,认为返回值都是int
4)在 openSession()时 Mybatis 会创建 SqlSession 时同时创建一个Transaction(事务对象),同时 autoCommit 都为 false
如果出现异常,应该 session.rollback()回滚事务
————————————————————————————————————————————————
一般情况下会在catch中进行rollback事务回滚
五、MyBatis新增、删除、修改
<insert id="ins" parameterType="People">
insert into people values(default,#{name},#{age})
</insert>
通过 session.insert()调用新增方法
int index1 = session.insert("a.b.ins", p);
if(index1>0){
System.out.println("成功");
}else{
System.out.println("失败");
}
删除修改类似,标签为<delete> 和 <update>