mybatis sql复用,软更新,取别名,properties
取别名:我们在在写mapper.xml的时候 resultType 的值时通常都需要写类的全称(com.kz.po.Student)这样写一个还好但是写多了就e…相对应来说还是比较麻烦的,所以mybatis就出了一个取别名的配置。
直接上代码
// 在主配置文件(mybatis-config.xml)中的configuration标签里面添加
<typeAliases>
// 这一句是给 com.kz.dao.StuDao 类取别名,在mapper.xml 中只需要写 stuDao 就行
<typeAlias type="com.kz.dao.StuDao" alias="stuDao"></typeAlias>
// 下面这一段 是吧 com.kz.po 目录下的类全部都加载了,
// 在mapper.xml中使用时,我们只需要首字母小写就行( stuDao,cardDao )
<package name="com.kz.po"/>
</typeAliases>
// PS: 上面取别名这一块需要注意,只能给类取别名,接口是不行的(dao层)
properties:properties 标签中的配置可以供整个配置文件使用,在任何位置都可以引入其中配置的值。properties 标签可以通过子标签 property 标签来配置一些子元素信息,也可以配置外部的动态文件
不过我们这里就只用最常用的(外部的动态文件),,
第一步 先在resource 目录下 添加文件 mysql.properties 下面的值都是 关于连接 mysql 数据库的信息
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/student?characterEncoding=utf-8
jdbc.username=root
jdbc.password=yjy
第二步 在 configuration 标签里面添加 resource 是指 properties 的文件地址
<properties resource="mysql.properties"></properties>
第三步 获取 properties 中的值
<environments default="development">
<environment id="development">
<!-- 事务的类型:jdbc -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
properties其实不用也没什么影响,只不过方便管理一些数据,但是统一管理还是很香的
sql 复用 ,直接上代码解释吧
<mapper namespace="com.kz.dao.CardDao">
<!-- 我们可以先在这里声明一个sql片段 -->
<sql id="column_all">
card_id , card_name , card_name
</sql>
<select id="cardAll" resultType="card" parameterType="card">
select
<!-- 接着到这里去引用,
你可能会觉得这样有什么必要呢,直接写不好嘛,e.....
可以这样讲,一张表查询肯定不止一个啊...如果很多就,或者字段很多就 -->
<include refid="column_all"></include>
from card
<!-- where
如果里面的if有符合条件的那么就会 在 card后面加上where ,并且还会把第一个条件的 and 给去掉)
如果要是里面的if没有一个符合条件的 那么在 card 后面什么都不会加上
这个标签还是很智能的
-->
<where>
<!-- 判断我穿进来的 参数 是否有值 -->
<if test="card_id != 0 and card_id != null">
and card_id = ${card_id}
</if>
<!-- 同上,只不过这里多了一个的参数多了一些 java 里面的方法,反正就是想说明java里面的方法也是可用的 -->
<if test="card_name != null and card_name.trim().length() > 0 ">
and card_name = #{card_name}
</if>
</where>
</select>
</mapper>
软更新:就是有参数就 关系没参数就不更新
<update id="cardUpdate" parameterType="card">
update
card
<set>
<if test="card_name.trim().length() != 0 and card_name != null">
card_name = #{card_name} ,
</if>
<if test="card_id != 0 and card_id != null">
stu_id = #{stu_id} ,
</if>
</set>
where
card_id = #{ card_id }
</update>
细细品,这一块重点也是使用到 if
修改使用 的是 set