zoukankan      html  css  js  c++  java
  • mybatis总结(二)(mybatis的基本增删改查实例说明)

    涉及文件

     

    首先要介绍一下mybatis开发所需要的文件:

    User.java(pojo对象,这里详细说明)

    Mapper.java(映射器接口,这里不详细说明)

    dbconfig.properties(数据库连接配置)

    mybatis-config.xml(全局配置文件 名称不固定)

    Mapper.xml(映射器xml文件,描述映射关系,sql等内容)

    dbconfig.properties(数据库连接配置)

    1 jdbc.driver = com.mysql.jdbc.Driver
    2 jdbc.url=jdbc:mysql://localhost:3306/mybatis
    3 jdbc.username=root
    4 jdbc.password=root

    注意:

    1. 需要对应修改url中mysql数据库所在的地址和数据库名。

    2. 需要对应修改用户名和密码。

    mybatis-config.xml(全局配置文件 名称不固定)

    里面都有如下属性

    1. properties(属性)

    2. settings(全局配置参数)

    3. typeAliases(类型别名)

    4. typeHandlers(类型处理器):mybatis通过typeHandlers完成jdbc类型和java类型的转换。通常自带的就够用了,不需要自己额外配置了。

    5. objectFactory(对象工厂)

    6. plugins(插件)

    7. environments(环境集合属性对象)

      environment(环境子属性对象)

        transactionManager(事务管理)

        dataSource(数据源)

    8. mappers(映射器)

    <?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>
    <!-- 
     1、mybatis可以使用properties来引入外部properties配置文件的内容
     resource是引入类路径下的资源
     url:引入网络网络路径或磁盘路径下的资源
     -->
        <properties resource="dbconfig.properties"></properties>
        <settings></settings>
        <!-- 别名 -->
        <typeAliases>
            <!-- 单个 -->
            <typeAlias type="com.tm.pojo.User" alias="user"/>
            <!-- 批量 -->
            <!-- <package name="com.tm.pojo"/> -->
        </typeAliases>
    
        <!-- 和spring整合后 environments标签将废除-->
        <environments default="development">
            <environment id="development">
                <!-- 使用jdbc事务管理,事务控制由mybatis -->
                <transactionManager type="JDBC" />
                <!-- 数据库连接池,由mybatis管理 -->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}" />
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments>
        <!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
        <!-- 加载映射文件 这里还有其他配置方式class url 具体参考下文 -->
        <mappers>
            <mapper resource="EmployeeMapper.xml" />
        </mappers>
    </configuration>

    注意:

    1. 使用数据库连接池的时候,properties标签里引入了dbconfig.properties文件,dataSource里使用了${ }符号,意思是替代数据库的连接信息,这么写的好处是将数据库连接信息单抽取出来,提高其复用性。(也可以直接写)

    2. 和spring整合之后,environment标签将废除。

    3. 在最下面的mappers标签中可以有四种方法来加载配置文件。

     1 <!-- 使用相对于类路径的资源引用 -->
     2 <mappers>
     3   <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
     4   <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
     5   <mapper resource="org/mybatis/builder/PostMapper.xml"/>
     6 </mappers>
     7 <!-- 使用完全限定资源定位符(URL) -->
     8 <mappers>
     9   <mapper url="file:///var/mappers/AuthorMapper.xml"/>
    10   <mapper url="file:///var/mappers/BlogMapper.xml"/>
    11   <mapper url="file:///var/mappers/PostMapper.xml"/>
    12 </mappers>
    13 <!-- 使用映射器接口实现类的完全限定类名 -->
    14 <mappers>
    15   <mapper class="org.mybatis.builder.AuthorMapper"/>
    16   <mapper class="org.mybatis.builder.BlogMapper"/>
    17   <mapper class="org.mybatis.builder.PostMapper"/>
    18 </mappers>
    19 <!-- 将包内的映射器接口实现全部注册为映射器 -->
    20 <mappers>
    21   <package name="org.mybatis.builder"/>
    22 </mappers>

    4. 全局配置文件中,properties标签中也可以配置数据库的连接(不常用 且优先级最低)。

    如果很多地方都配置了数据库的连接,那么他们的优先级顺序为:代码中配置(通过参数传递) > resource/url 属性中指定的配置文件(dbconfig.properties) > properties标签中的(properties 属性中指定的属性)。

    1 <properties>
    2     <property name="driver" value="com.mysql.jdbc.Driver" />
    3     <property name="url" value="jdbc:mysql://localhost:3306/test" />
    4     <property name="username" value="root" />
    5     <property name="password" value="root" />
    6 </properties>

    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" >
    <!-- namespace命名空间,作用就是对sql进行分类化管理 这里直接指定了接口的路径 -->
    <mapper namespace="com.tm.dao.UserDao" >
        <!-- 查询1 -->
        <select id="findUserById" parameterType="int" resultType="com.tm.pojo.User">
            select id,name from user where id=#{id}
        </select>
    
        <!-- 查询2 -->
        <select id="findUserByName" parameterType="java.lang.String" resultType="com.tm.pojo.User">
            select * from user where username like '%${value}%'
        </select>
    
        <!-- 添加1 -->
        <insert id="insertUser" parameterType="com.tm.pojo.User">
            insert into user (id,username,sex) values (#{id},#{username},#{sex})
        </insert>
    
        <!-- 添加2 -->
        <insert id="insertUserGetKey" parameterType="com.tm.pojo.User">
            <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
                select last_insert_id()
            </selectKey>
            insert into user (username,sex) values (#{username},#{sex})
        </insert>
    
        <!-- 删除 -->
        <delete id="deleteUser" parameterType="java.lang.Integer">
            delete from user where id=#{id}
        </delete>
    
        <!-- 更新 -->
        <update id="updateUser" parameterType="com.tm.pojo.User">
            update user set username=#{username},sex=#{sex} where id=#{id}
        </update>
    </mapper>

    注意:

    查询1:

    1. 查询用select标签。

    2. id:id的值findUserById要和接口(UserMapper.java)中方法名一致。

    3. parameterType:parameterType表示输入参数的类型,这里指定的是int类型。

    4. #{ }:#{ }表示一个占位符,里面的参数id表示输入进来的参数,如果输入的数据是简单类型,里面可以随便写,比如:#{id},#{value}等。

    5. resultType:指定sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。如果在全局配置文件中设置了typeAliases别名,那么可以简化成user。

    查询2:

    1. parameterType:java.lang.String等同于String

    2. ${ }:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。不过这种方式容易引起sql注入。如果传入类型是简单类型,${ }中只能使用value。

    3. sql后面不能加 ‘;’。

    添加1:

    1. parameterType:这里的参数就是pojo了,不是简单类型了。

    2. #{ }中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值。

    3. 添加功能用select标签。

    添加2:

    1. 这里使用selectKey标签用于将插入的数据的id返回(前提是数据库中id列设置了自增,id列为数值型,所以代码里插入的时候会默认添加id列)。

    2. keyProperty:将查询到的主键值设置到parameterType指定的对象的哪个属性。

    3. order:selectKey标签中sql的执行顺序(相对于insert标签里的sql来说)。

    4. resultType:指定selectKey标签中sql的执行的结果类型。

    5. 如果想要先生成主键的话,可以按照如下做法来做:

      (1)selectKey标签中的order属性值改为BEFORE。

      (2)selectKey标签中的resultType属性值改为java.lang.String。

      (3)selectKey标签中的sql改为select uuid()。

      (4)数据库中id列去掉自增并将类型改为字符型。

    6. 如果是要生成序列的话(oracle)可以将sql改成select 序列名.nextval()。

    删除:

    1. 删除功能用delete标签。

    更新:

    1. 更新功能用update标签。

    这里还需要注意一些开发规范:

    1. mapper.xml中namespace等于mapper接口的地址。

    2. mapper.java接口中方法名和mapper.xml中statement的id一致。

    3. mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。

    4. mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

    参考:

    1. https://www.cnblogs.com/hfultrastrong/p/10405247.html

    2. https://www.cnblogs.com/iris-/p/11732076.html

    持续更新!!!

  • 相关阅读:
    C#之流程控制
    UML画图总结以及浅谈UNL九种图
    UML视频总结
    英语总结
    UML coming
    那天我把“小四”拆了
    first 关于文档(总结)
    机房收费需求分析文档
    梦开始的地方
    WebRTC 开发实践:为什么你需要 SFU 服务器
  • 原文地址:https://www.cnblogs.com/flyinghome/p/12354564.html
Copyright © 2011-2022 走看看