J2EE轻量级框架--4.04学习心得

今天回顾了一下上周学到的知识,特地来总结一下,主要是mybatis框架方面的:


第一步是导入JAR包,mybatis-3.3.0.jar、mysql-connector-java-5.1.7-bin.jar


之后我们会在src文件夹中新建【properties文档】,以键值对的格式写明一些用于连接数据库的基本参数信息
jdbc.driver & com.mysql.jdbc.Driver
jdbc.url & jdbc:mysql://localhost:3306/mybatis115?useUnicode=true&characterEncoding=utf-8
jdbc.name & loginName
jdbc.password & password


因为mysql数据库采用GBK编码格式,所以在此写明
useUnicode=true&characterEncoding=utf-8来指明字符的编码解码格式
jdbc.name和jdbc.password分别对应着连接数据库的登录名和密码
采用properties文档而非直接写入mybatis.cfg.xml文件使得项目在数据库连接上更为灵活


现在我们开始在src文件夹中新建【mybatis.cfg.xml】文档书写配置文件
按照惯例
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">


使用<properties>标签引入我们刚刚书写的properties文档
<properties resource="datasources.properties"/>


<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.name}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
使用<transactionManager>设置事务管理器
这里设置type="POOLED"表明支持JDBC数据源连接池
采用${}的形式取出properties文档中键对应值


现在开始根据业务需求书写实体类和持久层接口
在书写实体类时可以在实体类中
设置访问权限为private,书写公共的无参构造和有参构造、get/set方法,重写toString方法以测试使用mybatis框架
在书写持久层接口后,我们暂时不书写实现类,我们先将尝试使用xml映射配置文件的形式完成一些基本的数据库操作


此时我们需要在mybatis.cfg.xml配置文件<properties>、<environments>标签之间加入<typeAliases>标签
<typeAliases>
<package name=" "></package>
</typeAliases>
将包内的所有实体类的类名,来作为该类的类别名


在<environments>标签之后书写<mappers>标签
<mappers>
<package name=" "/>
</mappers>
告知包内的持久层接口与xml映射配置文件


注意mybatis.cfg.xml配置文件中书写格式由mybatis-3-config.dtd格式文档确立


现在我们开始在放置持久层接口的包中,书写【xml映射配置文件】
按照惯例
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">


书写<mapper namespace=" ">命名空间
用于更好的分类sql语句块,防止sql语句块重名
在设置了命名空间后,方可使用“命名空间.语句块名”的形式进行调用相应的sql语句


【添加一条表记录】
首先在添加方法的参数中书写别名
public int saveUserEntity(@Param("u")UserEntity user);
然后书写<insert>标签
<insert id="saveUserEntity" parameterType="UserEntity" useGeneratedKeys="true" keyProperty="u.id">
insert into t_user (user_name,password) values (#{u.userName},#{u.password})
</insert>
id="saveUserEntity" 属性值应与持久层接口对应的方法名一致
parameterType="UserEntity" 用于对应的持久层接口方法接受的参数类型
useGeneratedKeys="true"表示执行完添加语句后可以返回自动增长列的主键值
keyProperty="u.id"表示将返回的主键值填充当前对象id的属性值
#{u.userName}由于在参数中书写别名,所以在此可以使用“别名.属性名”的形式


【修改一条表记录】
<update id="updateUserEntity">
update t_user set user_name = #{u.userName} where id= #{id}
</update>


【查询一条表记录】
在查询之前我们一般需要在<mapper>标签中书写<resultMap>标签,建立实体类属性和数据库字段的映射关系
一个简单的映射示例:
<resultMap id="userMap" type="UserEntity">
<id property="id" column="id"/>
<result property="id" column="id"/>
<result property="userName" column="user_name"/>
<result property="password" column="password"/>
</resultMap>
id属性是此结果集映射的唯一标识,用于<select>对此映射的调用
type属性指出这个字段对应的数据对象的数据类型
<id>标签可以帮助提高整体效能,特别对于缓存和嵌入结果映射


<select id="getUserEntityByNameAndPassword" resultMap="userMap">
select * from t_user where user_name = #{userName} and password = #{password}
</select>
在上面的<select>标签中,我们利用 resultMap="userMap" 表明适用的结果集映射
虽然这里通过 userName 、password 的匹配,查询用户对象,但显然此用户也没有更多的数据信息了 :)
在实际业务需求中可以设置更多属性(字段)


【删除一条表记录】
<delete id="deleteUserEntity">
delete from t_user where id = #{id}
</delete>


以上即是一些最为基本的增加、修改、查询以及删除的操作了


【关于#和%】
#在生成SQL时,对于字符类型参数,会拼装引号


$在生成SQL时,不会拼装引号
例如:
<select id="findByName" resultMap="userMap">
select * from t_user where u_userName like '%${userName}%'
</select>



【批量操作】
批量增加表记录:
<insert id="batchAddUserEntity" parameterType="java.util.List">
insert into t_user (user_name,password) values
<foreach collection="list" item="user" separator=",">
(#{user.userName},#{user.password})
</foreach>
</insert>


批量删除表记录
<delete id="batchDeleteUserEntity">
delete from t_user where id in 
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>


parameterType="java.util.List" 用于表明对应的mapper接口方法接受的参数类型
<foreach>标签类似于java语言中的for each循环,用于遍历集合中的元素
collection属性的值必须是指定的
如果传入的是单参数且参数类型是一个List集合的时候,collection属性值为list
如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
如果传入的参数Map集合,且Map集合中以键值对的形式封装了List集合或array数组,此时collection属性值为List或array对象在Map集合中的键
item 是元素别名
open="(" 表示以英文括号开始
close=")" 表示以英文括号结束
两者之间为遍历结果
separator="," 表示以英文逗号分隔遍历结果

【动态条件查询】
查询条件是由用户选择的,所以查询语句是动态可变的
为方便代码重用,我们首先将在<mapper>标签中书写条件语句
<sql id="condition">
<if test="userName != null and userName != ''">
and user_name like '%${userName}%'
</if> 

<if test ="gender != null and gender != ''">
and gender = #{gender}
</if>
</sql>


id="condition" 是此条件语句的唯一标识,以便于查询语句对其的调用
若test="true"则拼接<if>标签中的sql语句


<select id="selectUserEntityByCondition" resultMap="userMap">
select * from t_user where 1=1
<include refid="condition"/>
</select>


使用<include refid="condition"/>即完成了条件语句的动态拼接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值