• 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

    持续更新!!!

  • 相关阅读:
    EF Code First列名 'Discriminator' 无效的问题
    并行编程
    通过http上下文判断是否是Ajax请求
    桌面或文件夹里单击鼠标右键新建菜单下不显示文本文档的处理方法
    Frameset框架集的应用
    定时帧(基于定时器的动画 11.1)
    自定义缓冲函数(缓冲 10.2)
    动画速度(缓冲 10.1)
    手动动画(9.2 图层时间)
    CAMediaTiming`协议(9.1 图层时间)
  • 原文地址:https://www.cnblogs.com/flyinghome/p/12354564.html
Copyright © 2020-2023  润新知