MyBatis初探——增删改查

MyBatis的sql语句
MyBatis的sql语句并不是写在java代码中,而是写在配置文件中。MyBatis在启动的时候会读取配置文件的信息,将sql代码放入对应的区域的。等待dao层的调用。配置文件同样也是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">
    <!--namespace为命名空间,必须保证唯一,一般将一个实体的数据库操作都放入同一个xml配置中  -->
<mapper namespace="customer">
    <!-- 这里面配置sql -->
</mapper>

sql查询语句
查询语句用select标签标示,标签的id必须在本xml保证唯一。以为后面MyBatis调用sql语句的时候是根据id名来调用的,如果重复MyBatis则无法找到对应的sql语句进行执行。既然是查询,查询的结果就必须封装到实体类中。MyBatis也提供了封装的方式。同样也是写在配置文件中。resultMap对应的就是封装的配置。

<resultMap type="com.lingjiu.model.Customer" id="customerMapper">
        <!-- 
        id表示主键其实和result区别并不大。
        property表示在这个实体类中的字段名 
        javaType表示这个字段的类型
        column 表示这个字段对应的数据库字段名
        jdbcType 表示这个字段在数据库的类型
        这四项也可以都不写。MyBatis也会根据类名里的字段名寻找并进行封装,但如果数据库字段和实体类字段不同则需配置
         -->
        <id property="customerId" javaType="int" column="customerId" jdbcType="INTEGER" />
        <result property="customerName" javaType="java.lang.String" column="customerName" jdbcType="VARCHAR"/>
        <result property="customerTel" javaType="java.lang.String" column="customerTel" jdbcType="VARCHAR"/>
        <result property="customerAddress" javaType="java.lang.String" column="customerAddress" jdbcType="VARCHAR"/>
    </resultMap>
<select id="selectCustomer" resultMap="customerMapper">
     select customerId,<include refid="customerField"></include> from customer
</select>

实体类的Customer字段设计

public class Customer {
    /**
     * 客户id,主键
     */
    private int customerId;
    /**
     * 客户姓名
     */
    private String customerName;
    /**
     * 客户电话
     */
    private String customerTel;
    /**
     * 客户收货地址
     */
    private String customerAddress;

    //set和get忽略......
}

因为配置文件为xml格式。所以我们需要加入到总的配置文件中这样MyBatis在运行的时候才会加载配置文件

<!--放入configuration标签的尾部 -->
 <mappers>
 <!--resource为配置文件的路径 -->
    <mapper resource="com/lingjiu/config/sqlxml/CustomerMapper.xml" />   
  </mappers>

sql语句执行
配置好了我们可以在java代码中执行其中的方法。

@Test
    public void selectTest(){
        List<Customer> list = null;
        //数据库连接
        SqlSession sqlSession = null;
        try {
            //上一次节封装的获取数据库连接方法
            sqlSession = DBAccess.getSqlSession();
            //执行的sql查询方法,selectList也可以再传递一个参数,参数类型为Object用来传递sql查询条件
            list = sqlSession.selectList("customer.selectCustomer");
            for (int i = 0; i < list.size(); i++) {
                Customer customer = list.get(i);
                System.out.println(customer.getCustomerId()+","+customer.getCustomerName()+","+customer.getCustomerTel()+","+customer.getCustomerAddress());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }
    //打印结果:1,李雷1,1101,北京1

sql插入语句配置
插入语句用标签insert表示。java调用的方法和查询语句类似,

//parameterType为传入的类型。Mybatis会取字段的值来放入对应的位置。
//#{customerName}为取值方法。customerName必须和parameterType的实体类字段名相同。
<insert id="insertCustomer" parameterType="com.lingjiu.model.Customer">
        insert into customer (customerName,customerTel,customerAddress) values (#{customerName},#{customerTel},#{customerAddress})
    </insert>

//java语法sqlSession.insert("customer.insertCustomer", customer);
//必须注意执行完上面的方法后必须执行:sqlSession.commit();进行事物提交否则无法保存数据
//返回值1为成功,0为失败

如果数据库主键是系统自动生产的,则可以配置获取保存后的数据主键

//keyProperty为parameterType配置的类中的字段名 Mybatis会自动保存进去
<insert id="insertCustomer" useGeneratedKeys="true" keyProperty="customerId" parameterType="com.lingjiu.model.Customer">
        insert into customer (customerName,customerTel,customerAddress) values (#{customerName},#{customerTel},#{customerAddress})
</insert>
//customer为上面配置的parameterType="com.lingjiu.model.Customer"类型
//java语法sqlSession.insert("customer.insertCustomer", customer);
//必须注意执行完上面的方法后必须执行:sqlSession.commit();进行事物提交否则无法保存数据

MyBatis还提供了sql标签用来配置常用的sql语句,比如像字段
include标签可以根据refid找到对应的sql语句。进行语句拼接。防止写入大量重复语句。

<sql id="customerField">customerName,customerTel,customerAddress</sql>
<insert id="insertCustomer" useGeneratedKeys="true" keyProperty="customerId" parameterType="com.lingjiu.model.Customer">
        insert into customer (<include refid="customerField"></include>) values (#{customerName},#{customerTel},#{customerAddress})
    </insert>

sql删除

<delete id="deleteCustomer" parameterType="com.lingjiu.model.Customer">
        delete from customer where customerId = #{customerId}
    </delete>
//java语法sqlSession.insert("customer.deleteCustomer", customer);
//必须注意执行完上面的方法后必须执行:sqlSession.commit();进行事物提交否则无法保存数据
//返回值1为成功,0为失败

sql更改

<update id="updateCustomer" parameterType="com.lingjiu.model.Customer">
        update customer set customerName = #{customerName},customerTel = #{customerTel},customerAddress = #{customerAddress} where customerId = #{customerId}
    </update>
//java语法result = sqlSession.update("customer.updateCustomer",customer);
//必须注意执行完上面的方法后必须执行:sqlSession.commit();进行事物提交否则无法保存数据
//返回值1为成功,0为失败

select,delete,update,insert这写标签还有子标签,where,set,等用法。这些标签里面有if标签进行条件判定。

猜你喜欢

转载自blog.csdn.net/u011456867/article/details/73530447