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

准备工作

首先从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 configuration
PUBLIC "-//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 mapper
PUBLIC "-//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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值