Mybatis----parameterType属性、分页查询、事务处理

一、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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值