• Java




    一. 开发步骤:

    1. 创建 PO (model) 类,根据需求创建。

    2. 创建全局配置文件 sqlMapConfig.xml。

    3. 编写映射文件。

    4. 加载映射文件, 在 SqlMapConfig.xml 中进行加载。

    5. 编写测试程序,连接并操纵数据库。
        - 读取配置文件。
        - 通过 SqlSessionFactoryBuilder 创建 SqlSessionFactory 会话工厂。
        - 通过 SqlSessionFactory 创建 SqlSession
        - 通过 SqlSession 的操作数据库方法。
        - 关闭 SqlSession。






    二. 创建项目

                   代码获取

    1. Dao创建

    2. Dao创建并整合到 Spring

    4. mapper创建并整合到 Spring






    三. 参数信息

    parameterType : 指定输入参数䣌 java 类型。
    resultType    : 指定输出结果的 java 类型。

    #{} : 相当于预处理中的占位符 -> ? ,可以接收 HashMap, POJO 类型参数,简单类型时参数可以是 value 或其它。(可防止 sql 注入)

    ${} : 相当于拼接 SQL 串,对传入的值不做任何解释,原样输出,可接受 HashMap, POJO 类型参数,接收简单类型参数时只能时 value。(有sql注入)

    selectOne  : 只能查询 0 或 1 条记录,大于一条记录会报错。

    selectList : 可以查询 0 或 n 条记录


    四. mybatis 的 Dao 编写 【通过 mapper 代理方式实现】

    1. 创建 接口类 (UserMapper)

    package com.q.mybatis.mapper;
    
    import com.q.mybatis.model.User;
    
    public interface UserMapper {
    
        public int save(User user);
    
        public User getUserById(int id);
    
    }


    2. 创建 UserMapper.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.q.mybatis.mapper.UserMapper">
    
        <insert id="save" parameterType="user">
            insert into user(username, sex, birthday, address)
            values (#{username}, #{sex}, #{birthday}, #{address})
        </insert>
    
    <!--
        namespace : 接口映射地址
        id : 方法名
        parameterType : 方法参数类型 (如果是一个类,可直接放上类的路径, 可在 SqlMapConfig.xml 文件中设置别名)
        resultType : 模型地址 ( 可以在 SqlMapConfig.xml 文件中设置别名 )
     -->
    
        <select id="getUserById" parameterType="int" resultType="user">
            select * from user where id = #{id}
        </select>
    
    </mapper>


    3. 加载映射文件

    <!--  加载映射文件  -->
    <mappers>
        <mapper resource="com/q/mybatis/mapper/UserMapper.xml"></mapper>
    </mappers>



    4. 编写测试代码

    import com.q.mybatis.mapper.UserMapper;
    import com.q.mybatis.model.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    
    public class t4 {
    
        SqlSession session;
    
        @Before
        public void before() throws IOException {
    
            System.out.println("insert Before");
    
            // 1. 读取配置文件
            InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
    
            // 2. 通过 SqlSessionFactoryBuilder 创建 SqlSessionFactory 会话工厂
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
    
    
            session = sessionFactory.openSession();
        }
    
    
        @After
        public void after(){
            session.close();
        }
    
    
        @Test
        public void test1(){
            UserMapper userMapper = session.getMapper(UserMapper.class);
    
            // 获取数据
            System.out.println(userMapper.getUserById(16));
    
            // 添加数据
            User user1 = new User("t4_5","1",new Date(), "addr");
            userMapper.save(user1);
            session.commit();
        }
    
    
    }



    五. resultType / resultMap

    1. resultType (表字段必须和类属性对应,如果不对应则返回 Null):
        模型地址 ( 可以在 SqlMapConfig.xml 文件中设置别名 )

    <select id="getUserById" parameterType="int" resultType="com.q.mybatis.model.User">
        select * from user where id = #{id}
    </select>




    2. resultMap: 当类属性字段和数据库字段不对应时,可以使用这个方法查询

    <resultMap id="userResultMap" type="user">
        <id property="id" column="id_"></id>
    
        <result property="username" column="username_"></result>
        <result property="sex" column="sex_"></result>
        <result property="birthday" column="birthday_"></result>
        <result property="address" column="address_"></result>
    </resultMap>
    
    <select id="getUserById" parameterType="int" resultMap="userResultMap">
        select
            id id_, username username_, sex sex_, birthday birthday_ , address address_
        from user where id = #{id}
    </select>




    六. if where 使用


    1. 配置文件 XML

    <select id="findUserList" parameterType="com.q.mybatis.vo.UserQueryVO" resultType="user">
    
        select * from user
        <where>
            <if test="user.sex != null and user.sex != ''">
                sex = #{user.sex}
            </if>
    
            <if test="user.username != null and user.username != ''">
                and username like '%${user.username}%'
            </if>
    
        </where>
    
    </select>




    2. 测试方法

    @Test
    public void test2(){
        UserMapper userMapper = session.getMapper(UserMapper.class);
        UserQueryVO query = new UserQueryVO();
    
        User user = new User();
        user.setSex("1");
    
        query.setUser(user);
    
        List<User> users = userMapper.findUserList(query);
        System.out.println(users);
    }




    七. 一对一

    1. XML 配置

    <!--  如果一个表中关联着其它表,就使用 resultMap  -->
    <resultMap id="orderRslMap" type="orders">
        <!--  往 orders 的模型匹配数据  -->
        <id column="id" property="id"/>
        <id column="note" property="note"/>
        <id column="number" property="number"/>
        <id column="createtime" property="createtime"/>
    
        <!--  往 orders 的关联表 user 匹配数据  -->
        <!--  注意: 这里使用 javaType  -->
        <association property="user" javaType="user">
            <id column="user_id" property="id" />
            <id column="username" property="username" />
            <id column="address" property="address" />
        </association>
    
    </resultMap>
    
    
    <select id="findOrderById" parameterType="int" resultType="orderRslMap">
        select a.username, b.* from user a, orders b where a.id = b.id
    </select>




    2. 查询

    orderMapper mapper = session.getMapper(OrderMapper.class);
    
    Orders order = mapper.findOrderById(3);
    
    System.out.println(order);
    System.out.println(order.getUser());





    八. 一对多

    <resultMap id="orderRslMap" type="orders">
        <!--  往 orders 的模型匹配数据  -->
        <id column="id" property="id"/>
        <id column="note" property="note"/>
        <id column="number" property="number"/>
        <id column="createtime" property="createtime"/>
    
        <!--  往 orders 的 orderdetail 匹配数据 一对多 -->
        <!--  注意:集合中的类型使用 ofType  -->
        <collection property="orderDetails" ofType="orderDetail">
            <id column="detail_id" property="id"/>
            <id column="item_id" property="itemsId"/>
            <id column="item_num" property="itemsNum"/>
        </collection>
    
    </resultMap>



    九. 多对多 : 上面的 <collection> 中继续嵌套 <collection> ..文档。。。



    十. 设置允许懒加载

    <settings>
        <setting name="lazyLoadingEnabled" value="true" />
    </settings>




    十一. 开启二级缓存

    1. SqlMapCOnfig.xml 文件中

    <settings>
        <setting name="cacheEnabled" value="true" />
    </settings>


    2. UserMapper.xml 文件中

    // type 默认不写用的是 mybatis 自带的缓存( perpetualCache )

    <cache></cache>


    3. 注意:当 session 关闭后,才会提交到 二级缓存 : session.close();
            当执行 update, delete, save 等操作时会清空缓存。




  • 相关阅读:
    oracle数据库sql比较日期
    JAVA中替换字符的方法replace和replaceAll 区别
    得到某个字段为空的所有记录
    使用jQuery操作元素属性
    JS控制元素可见(显示)与不可见(隐藏)
    当JS出现的Cannot read property 'XXX' of null错误
    判断两个对象不相等
    js将字符串转换为数字等类型
    EL表达式各种函数使用大全
    ajax返回值传给js全局变量
  • 原文地址:https://www.cnblogs.com/chaoqi/p/10721186.html
Copyright © 2020-2023  润新知