MyBatis初探——增删改查

来源:互联网 发布:英雄无敌3mac版 编辑:程序博客网 时间:2024/06/13 23:19

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标签进行条件判定。

原创粉丝点击