(二)mybatis学习之入门增删改查

来源:互联网 发布:asyncio python详解 编辑:程序博客网 时间:2024/05/20 20:46

准备工作

首先从github里【https://github.com/mybatis/mybatis-3】里下载mybatis,里面有个pdf说明文档,文档详细介绍了mybatis所涉及到的所有内容。开发的过程中,我们需要参考这个文档。

在eclipse里新创建一个maven项目,并添加响应的依赖包

(1)servlet的依赖包
(2)mybatis的依赖包
(3)mysql数据库依赖包
(4)log4j日志依赖包(slf4j和log4j)
(5)junit单元测试依赖包

pom.xml配置文件内容如下:
<dependencies>    <!-- 添加servlet的依赖包 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency>    <!-- 添加mybatis的依赖包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.1</version></dependency><!-- 加入mysql数据库依赖包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!-- 添加log4j依赖包(slf4j和log4j) --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.20</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>    <!-- junit单元测试包 -->    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>      </dependencies>



添加日志配置文件log4j.properties,内容如下:
log4j.rootLogger=DEBUG,Console    #Console  log4j.appender.Console=org.apache.log4j.ConsoleAppender  log4j.appender.Console.layout=org.apache.log4j.PatternLayout  log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n    log4j.logger.java.sql.ResultSet=INFO  log4j.logger.org.apache=INFO  log4j.logger.java.sql.Connection=DEBUG  log4j.logger.java.sql.Statement=DEBUG  log4j.logger.java.sql.PreparedStatement=DEBUG 


mybatis入门增删改查

对于mybatis开发内容来说,其实就是一个全局配置文件和N个mapper.xml映射文件以及sql查询结果所需要映射的的pojo实体类。
接下来以用户信息的增删改查功能来进行配置开发。

全局配置文件sqlMapConfig.xml

创建一个mybatis的全局配置文件sqlMapConfig.xml【内容可从mybatis的pdf说明文档里copy过来】
sqlMapConfig.xml内容如下:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- environments指的是mybatis运行环境,目前单独使用mybatis做测试时,需要在该环境中配置数据源。当mybatis与spring整合后,这一块内容则被废弃了。因为数据源等环境都交由了spring来管理 --><environments default="development"><environment id="development"><!-- 使用jdbc事务管理,事务控制由mybatis管理 --><transactionManager type="JDBC"/><!-- 数据库连接池,由mybatis管理 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull"/><property name="username" value="root"/><property name="password" value="888"/></dataSource></environment></environments></configuration>

根据id查询用户信息

映射文件(user.xml)

     需要在映射文件中配置sql语句
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace命名空间,作用是对sql语句进行分类管理附加说明:如果以后用到mapper代理开发,则这里的namespace内容必须与代理类的全路径一致如果其他配置文件(namespace=yyy)也有一个id值叫findUserById,那么这个时候,就要使用命名空间来区别java外部要使用某个findUserById查询时,就要用xxx.findUserById 或 yyy.findUserById 来获取对应的sql配置 --><mapper namespace="xxxx"><!-- 通过select来执行数据库的查询id:用于标识映射文件中的sql语句#{}:表示占位符#{id}:其中的id表示接收输入的参数,如果输入参数是简单类型,#{}中的参数名称可以任意parameterType:指定输入参数类型,目前这里是字符串类型parameterMap:早期版本,目前已废弃不用resultType:指定sql查询输出结果所映射的java对象类型,这里是返回一个user对象 --><select id="findUserById" parameterType="java.lang.String" resultType="pojo.User">select * from tab_user where id=#{id}</select></mapper>

pojo类(User.java)

public class User {private String id;private String userName;//用户名private String nickName;//昵称private String password;//登录密码private Integer sex;//性别private Date birthday;//出生日期private String province;//省private String city;//市private String county;//县private Date createTime;//创建时间/** get、set 方法*/

在sqlMapConfig.xml中配置加载user.xml文件

<!-- 加载映射文件 --><mappers><mapper resource="sqlMap/user.xml"/></mappers>

项目结构



测试



根据昵称模糊查询用户信息

配置文件

使用user.xml配置文件,在配置文件里添加如下配置代码:
<!-- 根据昵称模糊查询用户信息 resultType:指定的是单条记录所映射的java对象类型,虽然这里查询出来的结果集是list                            但是仍然设置resultType为对象类型如果这里使用#{value}占位符来接收输入参数,那么java代码里就得程序员自己加上%传进来,          如:List<User> userList = sqlSession.selectList("xxxx.findUserByName", "%卡%");          平时一般都不会使用这种方式来进行传值,我们应该把%放到配置文件中,此时需要用到${}${}:表示拼接sql串,将接收到的参数内容不加任何修饰拼接到sql语句中使用${}拼接sql,可能会引起sql注入。${value}:接收传入参数的内容,如果传入参数是简单类型,${}里面只能为value--><select id="findUserByName" parameterType="java.lang.String" resultType="pojo.User"> select * from tab_user where nickName like '%${value}%'</select>

代码测试




添加用户信息

配置文件

在user.xml中添加新增用户的sql配置

自增主键的返回

<!-- 新增用户 parameterType:指定输入参数类型是pojo#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值实际情况中,插入新记录后可能需要用到主键id,此时需要使用到selectKey来配置主键返回(1)自增主键返回:mysql自增主键,是执行insert提交之前主动生成一个自增主键,可以通过mysql函数获取到刚刚插入的主键id--><insert id="addUser" parameterType="pojo.User"><!-- 将插入数据的主键返回,返回到user对象中 select LAST_INSERT_ID();获取到insert进去的记录主键值,只适用于自增主键keyProperty:将查询到的主键值设置到parameterType指定的对象的某个属性order:select LAST_INSERT_ID()的执行顺序,BEFORE表示在insert语句之前执行,AFTER则反之--><selectKey keyProperty="id" order="AFTER" resultType="int">select LAST_INSERT_ID()</selectKey>insert into tab_user (userName,nickName,`password`,sex)values (#{userName},#{nickName},#{password},#{sex})</insert>

非自增主键返回

<!-- 新增用户 parameterType:指定输入参数类型是pojo#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值实际情况中,插入新记录后可能需要用到主键id,此时需要使用到selectKey来配置主键返回(1)自增主键返回:mysql自增主键,是执行insert提交之前主动生成一个自增主键,可以通过mysql函数获取到刚刚插入的主键id--><insert id="addUser" parameterType="pojo.User"><!-- 将插入数据的主键返回,返回到user对象中 使用mysql的UUID()方法获取主键值keyProperty:将查询到的主键值设置到parameterType指定的对象的某个属性order:select UUID()的执行顺序,BEFORE表示在insert语句之前执行,AFTER则反之--><selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"><!-- 这里可以根据项目需求设置主键的生成规则 -->select UUID()</selectKey>insert into tab_user (id,userName,nickName,`password`,sex)values (#{id},#{userName},#{nickName},#{password},#{sex})</insert>

代码测试

当前数据库表的id是uuid生成的,故这里只对非自增主键的例子进行测试



更新用户信息和删除用户信息

配置文件

<!-- 更新用户信息 --><update id="updateUser" parameterType="pojo.User" >update tab_user set userName=#{userName},`password`=#{password} where id=#{id}</update><!-- 根据id删除用户信息 --><delete id="deleteUserById" parameterType="java.lang.Integer">delete tab_user where id=#{id}</delete>

代码测试

更新用户代码测试


根据id删除用户代码测试




0 0
原创粉丝点击