mybatis(二) 搭建环境 mybatis的单表操作 mybatis的使用流程步骤

 搭建环境 

 1.下载mybatis

mybaits的代码由github.com管理,地址:https://github.com/mybatis/mybatis-3/releases


mybatis-3.2.7.jar----mybatis的核心包

lib----mybatis的依赖包

mybatis-3.2.7.pdf----mybatis使用手册


2. 创建mysql数据库 

mysql中创建数据库,导入以下脚本:


sql_data.sql:数据脚本,正常企业开在产品化需要提供初始化脚本(初始化数据)

sql_table.sql:表结构脚本,存储了表、存储过程、触发器等。


3. 创建java工程:

使用eclipse创建java工程,jdk使用1.7.0_72

4.log4j.properties

1.5需求

实现以下功能:
根据用户id查询一个用户信息
根据用户名称模糊查询用户信息列表
添加用户
更新用户
删除用户

需求分析:
根据用户id查询一个用户信息:
SELECT * FROM USER WHERE id=1

根据用户名称模糊查询用户信息列表:
SELECT * FROM USER WHERE username LIKE '%张%'

根据用户id查询一个用户信息

1.SqlMapConfig.xml
1.SqlMapConfig.xml配置

此方法为mybatis的全局配置文件,配置了数据源、事务等运行环境,加载配置mapper.xml映射。

使用mybatis-3-config.dtd约束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>

	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="mysql" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 加载mapper.xml -->
	<!-- <mappers></mappers> -->


</configuration>
2.mapper.xml映射文件

早期ibatis的映射文件以表名命名,后期mybatis 映射文件命名方式为:表名Mapper.xml。。
命名方式是不固定的。

映射文件使用mybatis-3-mapper.dtd


 3.pojo 

resultType:将sql查询结果集映射成java对象

将多个列的值映射到一个对象中,需要定义的pojoresultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射。


4.mapper.xml



5. SqlMapConfig.xml加载映射文件 

编辑SqlMapConfig.xml,加载User.xml映射文件

代码实现
@Test
	public void testFindUserById()throws Exception{
		
		//mybatis全局配置文件
		String resource = "SqlMapConfig.xml";
		
		//根据mybatis的全局配置文件构造 一个流
		InputStream inputStream = Resources.getResourceAsStream(resource);
		
		//创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
		//创建SqlSession会话
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//使用sqlSession查询用户
		//第一个参数:statement的id,前边要加namespace
		//第二个参数:输入的参数对象值
		//selectOne用于返回单个对象,如果sql查询返回一个列表(多个对象),如果使用selectOne报错
		User user = sqlSession.selectOne("test.findUserById", 1);
		System.out.println(user);
		
		//关闭sqlsession
		sqlSession.close();
		
	}

调试


 

根据用户名称模糊查询用户信息列表

 1. SqlMapConfig.xml

SqlMapConfig.xmlmybatis的全局配置文件,一个系统编写一个即可。


2.mapper.xml映射文件

</select>
	
	<!-- 根据用户名称模糊查询用户列表信息 
		resultType:不管结果集的数量有多少,resultType指定的单条记录所映射的Java对象
		resultType:映射的规则就是SQL查询的列名和pojo的属性名必须一直方可完成映射
		${}:表示一个字符串的拼接符,相当于字符串的拼接
			SELECT * from user where username LIKE '%  +  ${}  +   %';
		${}:接受参数是一个简单数据类型,${}中只能写value
		${}:拼接是无法防止SQL注入的
	-->
	<select id="findUserByName" parameterType="String" resultType="com.mybatis.demo_01.pojo.User">
	
		SELECT * from user where username LIKE '%${value}%'; 
			
</select>

在实际开发中建议使用#{}占位符方式。

代码实现

// 根据用户名称模糊查询用户信息
	@Test
	public void testFindUserByName() throws Exception {

		// mybatis全局配置文件
		String resource = "SqlMapConfig.xml";

		// 根据mybatis的全局配置文件构造 一个流
		InputStream inputStream = Resources.getResourceAsStream(resource);

		// 创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream); 

		// 创建SqlSession会话

		SqlSession sqlSession = sqlSessionFactory.openSession();

		//根据用户名称模糊查询
		//selectList用于 将sql查询结果映射成java对象 ,返回一个List<Object>
		//1参数:statement的id(等于namespace+statement的id)
		//2参数:输入参数值
		List<User> list = sqlSession.selectList("test.findUserByName", "张");
		
		System.out.println(list);
		
		// 关闭sqlsession
		sqlSession.close();

	}

添加用户

 mapper.xml

<!-- 添加用户 
	 
	   输入参数:需要输入参数是多个值,如果传入简单类型是无法满足要求。
	   		输入参数类型可以是pojo类型(包含多个属性)
	   #{}如何获取对象的值呢?   是通过OGNL读取对象的值
	   OGNL的表达式方式:属性.属性.属性.....知道把属性值读取过来为止
	   	   		
  		mysql数据库通过select  LAST_INSERT_ID();获取自增主键的值,在insert语句执行之后去执行LAST_INSERT_ID()获取新纪录的主键  			
	-->
	
	<insert id="insertUser" parameterType="com.mybatis.demo_01.pojo.User" >
	
	<!-- 
		keyProperty:将主键设置到参数的哪一个属性,设置到user的id属性中
		order:selectKey中的语句在insert语句执行后或前,这里要设置成after
		resultType:select LAST_INSERT_ID()查询出的值类型
	 -->
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			select  LAST_INSERT_ID()
		</selectKey>
		
		insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});	
	</insert>
	
	
	<!-- 使用mysql的UUID生成主键 -->
		<insert id="insertUserUUid" parameterType="com.mybatis.demo_01.pojo.User" >
	
	<!-- 
		keyProperty:将主键设置到参数的哪一个属性,设置到user的id属性中
		order:select UUID()在insert语句执行前得到主键,将主键设置到user的属性中
		resultType:select UUID()查询来的值
	 -->
		<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
			select  UUID()
		</selectKey>
		
		insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address});
	
	</insert>

代码实现
// 插入用户
	@Test
	public void testInsertUser() throws Exception {

		// mybatis全局配置文件
		String resource = "SqlMapConfig.xml";

		// 根据mybatis的全局配置文件构造 一个流
		InputStream inputStream = Resources.getResourceAsStream(resource);

		// 创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream);

		// 创建SqlSession会话

		SqlSession sqlSession = sqlSessionFactory.openSession();

		//构造 输入参数,就是插入的用户信息
		User user = new User();
		user.setUsername("赵六");
		user.setBirthday(new Date());
		user.setAddress("北京");
		//调用sqlSession插入用户
		sqlSession.insert("test.insertUser", user);
		
		//提交
		sqlSession.commit();
		
		// 关闭sqlsession
		sqlSession.close();

	}

 添加用户主键返回

  需求

当新记录插入之后需要取出新记录的主键,如果主键是由程序代码生成的获取主键比较方便,如果主键是数据库自动生成的,需要通过程序代码获取新记录的主键。

 

数据库自增主键的返回

mybatis要实现执行insert之后将主键通过输入参数对象返回。


 uuid()

 除了自增主键生成方式之外,还可以生成uuid的唯一序列号。

使用uuid好处:有利于数据库迁移,扩展。

缺点:对uuid数据作索引性能没有对数字型索引高。

 

主键返回流程:




用户修改和删除

1.mapper.xml

<!-- 修改用户 -->

   <update id="updateUser" parameterType="com.mybatis.demo_01.pojo.User">
   		update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
   </update>
	<!-- 删除用户 -->
	
	<delete id="deleteUser">
	
		delete from user where id=#{id}
	
	</delete>
测试
// 更新用户
	@Test
	public void testUpdateUser() throws Exception {

		// mybatis全局配置文件
		String resource = "SqlMapConfig.xml";

		// 根据mybatis的全局配置文件构造 一个流
		InputStream inputStream = Resources.getResourceAsStream(resource);

		// 创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream);

		// 创建SqlSession会话

		SqlSession sqlSession = sqlSessionFactory.openSession();

		// 构造 输入参数,就是更新的用户信息 
		User user = new User();
		// 更新的用户信息中必须要有id
		user.setId(62);
		user.setUsername("赵六3");
		user.setBirthday(new Date());
		user.setAddress("郑州");
		// 调用sqlSession插入用户
		sqlSession.update("test.updateUser", user);

		// 提交
		sqlSession.commit();

		// 关闭sqlsession
		sqlSession.close();

	}

	// 删除用户
	@Test
	public void testDeleteUser() throws Exception {

		// mybatis全局配置文件
		String resource = "SqlMapConfig.xml";

		// 根据mybatis的全局配置文件构造 一个流
		InputStream inputStream = Resources.getResourceAsStream(resource);

		// 创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream);

		// 创建SqlSession会话

		SqlSession sqlSession = sqlSessionFactory.openSession();

		sqlSession.delete("test.deleteUser", 60);
		// 提交
		sqlSession.commit();

		// 关闭sqlsession
		sqlSession.close();

	}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值