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
持续更新!!!