SSM框架实战系列之十一_MyBatis框架之DAO代码

  SSM框架实战系列之十一_MyBatis框架之DAO代码


  前面我们已经在项目中配置好了MyBatis框架,现在让我们用MyBatis框架来写点代码。


  通常情况下,一个DAO模块包含两个文件:DAO接口和包含SQL语句的xml文件。


  一、DAO接口

  假如我们有一个用户表,表结构如下:



  那么DAO接口的代码可以这样写:

@Repository
public interface UserDao {
	void add(User user);

	void del(int id);

	void update(User user);

	User getById(int id);

	List<User> list();
}

  MyBatis框架不要求编写DAO实现类。


  二、包含SQL语句的xml文件

  xml文件的内容有点多,我们先看一下代码,再详细讲解:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hanhf.ssm.dao.UserDao">
	<resultMap id="BaseResultMap" type="com.hanhf.ssm.bean.User">
		<id column="user_id" jdbcType="INTEGER" property="id" />
		<result column="user_name" jdbcType="VARCHAR" property="name" />
		<result column="password" jdbcType="VARCHAR" property="password" />
		<result column="picture" jdbcType="VARCHAR" property="picture" />
		<result column="real_name" jdbcType="VARCHAR" property="realName" />
		<result column="id_number" jdbcType="VARCHAR" property="idNumber" />
		<result column="remark" jdbcType="VARCHAR" property="remark" />
		<result column="add_date" jdbcType="TIMESTAMP" property="addDate" />
		<result column="is_use" jdbcType="BIT" property="use" />
	</resultMap>
	<sql id="dataFields">
		user_name, password, picture, real_name, id_number, remark, add_date, is_use
	</sql>
	<insert id="add" parameterType="com.hanhf.ssm.bean.User">
		insert into tbl_user(<include refid="dataFields" />)
		values (#{name}, #{password}, #{picture}, #{realName}, #{idNumber}, #{remark}, #{addDate}, #{use})
	</insert>
	<update id="del" parameterType="java.lang.Integer">
		update tbl_user
		set is_del = 1
		where user_id = #{id}
	</update>
	<update id="update" parameterType="com.hanhf.ssm.bean.User">
		update tbl_user
		set real_name = #{realName},
		id_number = #{idNumber},
		remark = #{remark}
		where user_id = #{id}
	</update>
	<select id="getById" parameterType="java.lang.Integer" resultMap="BaseResultMap">
		select user_id,
		<include refid="dataFields" />
		from tbl_user
		where is_del = 0 and user_id = #{id}
	</select>
	<select id="list" resultMap="BaseResultMap">
		select user_id,
		<include refid="dataFields" />
		from tbl_user
		where is_del = 0
	</select>
</mapper>

  1、<mapper namespace="com.hanhf.ssm.dao.UserDao">

  此xml文件的根节点是mapper元素,即映射,命名空间必须与上面的DAO接口名称一致,这样才能配合。


  2、<resultMap id="BaseResultMap" type="com.hanhf.ssm.bean.User">

  resultMap,即结果映射,是MyBatis框架中的一个重要概念,它可以将查询结果自动封装为一个Java Bean。

  在此xml文件中,每一个元素的id值都必须唯一。type值指定将查询结果封装为哪个类的Java Bean。

  接下来,就是结果的映射,例如:

  <id column="user_id" jdbcType="INTEGER" property="id" />
  <result column="user_name" jdbcType="VARCHAR" property="name" />

  id和result都是将数据表中的字段映射为实体类中的属性,其中column指定数据表中的字段名,property指定实体类中的属性名。id是表中的主键列,需要特殊声明,普通列都用result声明。


  3、<sql id="dataFields">

  MyBatis中的sql节点可以定义一段SQL脚本,以供后续使用,通常用于定义重复使用的SQL脚本,提升代码重用性。

  后面可以用<include refid="dataFields" />来引用这段SQL。


  4、insert

  <insert id="add" parameterType="com.hanhf.ssm.bean.User">
    insert into tbl_user(<include refid="dataFields" />)
    values (#{name}, #{password}, #{picture}, #{realName}, #{idNumber}, #{remark}, #{addDate}, #{use})
  </insert>


  常用的数据库操作有增删改查4种,因此就有相应的4种标签节点。

  insert节点用于指定插入操作,id值必须与DAO接口中的方法名称一致,以便配合。

  方法参数使用parameterType指定。

  使用#{属性名}的方式,取得实体类中某个属性的值用于生成SQL。


  增删改语句的标签结构都类似。


  5、select

  查询分为按id查找对象和查找所有对象。

  MyBatis会根据DAO接口返回值的声明,封装查询结果为一个对象或一个集合。

  使用resultMap声明返回的结果应如何进行映射转换,这里的值应与第2点的resultMap的id值配合。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值