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

持续更新!!!

原文地址:https://www.cnblogs.com/flyinghome/p/12354564.html