hsipeng / java_learnning_trip

spring springMVC mybatis
0 stars 1 forks source link

Mybatis #43

Open hsipeng opened 7 years ago

hsipeng commented 7 years ago

jdbc的缺点

mybatise是一个持久层框架

自动对象关系映射,使用SQL直接操作数据库 mybatis是半自动的ORM(对象关系映射)

Mybatis组件

hsipeng commented 7 years ago

Pojo

最简单的javabean ,用来传递数据

标签的使用

mybatis中的标签没有实际的约束条件,但最好标签对应相应语句的内容。

映射

在默认条件下,在使用mybatis时,列名保持一致,否则无法赋值

hsipeng commented 7 years ago

动态赋值操作

mybatis传值

mybatis默认传一个参数,多个参数时,封装为单值。

多条件查询

动态更新

<update id="updateUser" parameterType="bean.User">
        update user 
        <set>
            <if test="name!=null">name=#{name},</if>
            <if test="age!=0">age=#{age},</if>
            <if test="sex!=null">sex=#{sex}</if>
        </set> where id=#{id};
    </update>

动态查询

<where>
            <if test="id!=0">id=#{id}</if>
            <if test="name!=null">name=#{name}</if>
            <if test="age!=0">age=#{age}</if>
            <if test="sex!=null">sex=#{sex}</if>
        </where>

sql的复用

<sql id="selectUser">
        select * from user
    </sql>
<!-- 复用 -->
        <include refid="selectUser"/> 

别名标签

<typeAliases>
        <typeAlias type="bean.User" alias="User"/>
    </typeAliases>

批量删除

<!-- 
        批量删除
        集合操作
            array 数组
            list 
            map 中的key遍历的是value值
            open "("
            item 表示当前的遍历变量名
            separator 以“,”分隔
            close ")" 
     -->
    <delete id="delUsers">
        delete from user where id in
        <foreach collection="array" open="(" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </delete>

ps

sql语句不要写分号 转义字符<![CDATA[age<#{maxAge}]]>

mybatis的接口模式

hsipeng commented 7 years ago

mybatis中的缓存

<mapper namespace="mapper.UserMapper">
    <cache/>
    <select id="findAll" resultType="bean.User">
        select * from user
    </select>
</mapper>
public class User implements Serializable{
    private static final long serialVersionUID = 5048168053828815152L;

自动生成 generate mybatis

sqlMapGeneractor.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>

    <properties resource="generatorConfig.properties"/>

    <classPathEntry location="D:\project\Mybatis-day02-2\lib\mysql-connector-java-5.1.10-bin.jar" />

    <context id="tarena">

        <commentGenerator>
            <property name="suppressAllComments" value="${suppressAllComments}"/>
        </commentGenerator>
        <jdbcConnection driverClass="${driverClass}" connectionURL="${url}" userId="${username}" password="${password}" />

        <javaModelGenerator targetPackage="${modeltargetPackage}" targetProject="${targetProject}" />

        <sqlMapGenerator targetPackage="${sqltargetPackage}" targetProject="${targetProject}" />    
        <javaClientGenerator targetPackage="${clienttargetPackage}" targetProject="${targetProject}" type="XMLMAPPER" /> 

        <table schema="" tableName="user" />
    </context>
</generatorConfiguration>

generatorConfig.properties

suppressAllComments=true
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
username=root
password=123456
targetProject=Mybatis-day02-2
modeltargetPackage=cn.buttonz.pojo
sqltargetPackage=cn.buttonz.pojo
clienttargetPackage=cn.buttonz.mapper

自定义映射关系

<select id="findAll_U" resultMap="userRM">
        select id as user_id,name as user_name,age as user_age,sex as user_sex from user
    </select>
    <!-- 自定义结果集封装 -->
    <resultMap type="bean.User" id="userRM">
        <!--  主键id,不能省略-->
        <id column="user_id" property="id"/>
        <result column="user_name" property="name"/>
        <result column="user_age" property="age"/>
        <result column="user_sex" property="sex"/>
    </resultMap>

关联查询