• Mybatis入门


    一、Mybatis是JDBC一系列操作的封装,使开发者能更加专注于sql语句的编写。

    二、Mybatis的框架核心

    1.mybatis的配置文件:包括mybatis全局配置文件mybatis配置文件。

    2.mybatis通过读取配置文件信息构造出sqlsessionfactory。

    3.通过sqlsessionfactory来创建sqlsession。sqlsession执行sql语句。

    4.sqlsession通过底层的executor来操作数据库,一个是普通执行器,一个是缓存执行器(默认)。

    5.执行器将要处理的sql封装到一个MappedStatement对象中。

    三、mybatis入门

    1.配置SqlMapConfig

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
        <properties resource="db.properties"/>
    
    
        <!-- 配置mybatis的环境信息 -->
        <environments default="development">
            <environment id="development">
                <!-- 配置JDBC事务控制,由mybatis进行管理 -->
                <transactionManager type="JDBC"></transactionManager>
                <!-- 配置数据源,采用dbcp连接池 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://locahost:3306/mybatisday01?useUnicode=true&amp;characterEncoding=utf8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
    
        <!--告诉mybatis加载映射文件-->
        <mappers>
            <package name="com.law.mapper"></package>
    
        </mappers>
    </configuration>

    2.配置映射文件mapper.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="user">
        <!--根据id查询-->
        <!--
        [id]:statement的id,要求在命名空间内唯一
        [parameterType]:入参的java类型
        [resultType]:查询出的单条结果集对应的java类型
        [#{}]: 表示一个占位符?
        [#{id}]:表示该占位符待接收参数的名称为id。
        注意:如果参数为简单类型时,#{}里面的参数名称可以是任意定义
     -->
        <select id="findUserById" parameterType="int" resultType="com.law.model.User">
            SELECT * FROM user WHERE id = #{id}
        </select>
        <!--
                 [${}]:表示拼接SQL字符串
                 [${value}]:表示要拼接的是简单类型参数。
                 注意:
                 简单类型:int,byte,... string
                1、如果参数为简单类型时,${}里面的参数名称必须为value
                2、${}会引起SQL注入,一般情况下不推荐使用。但是有些场景必须使用${},比如order by ${colname}
          -->
    </mapper>

    3.将mapper配置到sqlmap中

    <mapper resource="com.law.sqlmap.User.xml"></mapper>

    4.通过java代码执行

    public void test01() throws IOException {
            //1.读取配置文件
            InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
            //2.通过SqlSessionFactoryBuilder创建SqlSessionFactory
            SqlSessionFactory sessionFactory =  new SqlSessionFactoryBuilder().build(is);
            //3.通过SqlSessionFactoty创建SqlSession
            SqlSession session = sessionFactory.openSession();
            //4.调用sqlSession对象中的方法操作数据库
            User user = session.selectOne("findUserById",10);
            System.out.println(user);
            //5.关闭sqlSession
            session.close();

    5.模糊查询

        <select id="findUserByName" parameterType="String" resultType="com.law.model.User">
            SELECT * FROM user WHERE username LIKE '%${value}%'
        </select>
    <!--
    [${}]:表示拼接SQL字符串
    [${value}]:表示要拼接的是简单类型参数。
    注意:
    简单类型:int,byte,... string
    1、如果参数为简单类型时,${}里面的参数名称必须为value
    2、${}会引起SQL注入,一般情况下不推荐使用。但是有些场景必须使用${},比如order by ${colname}
    -->
     
            List<User> users = session.selectList("findUserByName","张");
            System.out.println(users);

    6.增删改

        <insert id="insertUser" parameterType="com.law.model.User">
            INSERT INTO user (username,sex,birthday,address) VALUE (#{username},#{sex},#{birthday},#{address})
        </insert>
    <--增加-->
            User user = new User("law","男",new Date(),"sichuan");
            session.insert("insertUser",user);

        <delete id="deleteUser" parameterType="String">
            DELETE  FROM user WHERE username = #{username};
        </delete>
       public void test03() throws IOException{
            session.delete("deleteUser","law");
        }

        <update id="updateUser" parameterType="com.law.model.User">
            UPDATE user SET address = #{address},sex = #{sex}
            WHERE id = #{id}
        </update>
        public void test04() throws IOException{
            User user = new User();
            user.setId(29);
            user.setAddress("四川");
            user.setSex("女");
            session.update("updateUser",user);
        }

    7.插入后自动返回主键

        <insert id="insertUser2" parameterType="com.law.model.User">
            <selectKey keyProperty="id" resultType="int" order="AFTER">
                  SELECT LAST_INSERT_ID()
            </selectKey>
            INSERT INTO user (username,sex,birthday,address) VALUE (#{username},#{sex},#{birthday},#{address})
        </insert>

    after:插入后

    before:插入前,uuid使用

        @Test
        public void test05() throws IOException {
            User user = new User("law01","男",new Date(),"四川");
            session.insert("insertUser2",user);
            System.out.println("用户的id: "+user.getId());
        }
  • 相关阅读:
    序例化-Externalizable 接口
    线程休眠
    线程优先级
    const & 用法
    AcGePoint3d ads_point 转换
    结果缓冲区 resbuf具体用法
    选择集用法
    引用用法
    通过用户选择获取各种东西
    ARX中类型强制转换
  • 原文地址:https://www.cnblogs.com/xiaolan-/p/11831135.html
Copyright © 2020-2023  润新知