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());
    }
原文地址:https://www.cnblogs.com/xiaolan-/p/11831135.html