Mybatis之环境搭建以及插入时返回主键

一、Mybatis(ibatis)是什么

MyBatis 是支持普通SQL 查询,存储过程和高级映射的优秀持久层(dao)框架。MyBatis 消除了几乎所有的JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的XML 注解用于配置和原始映射,将接口和Java 的POJO(Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录。

半orm(对象关系映射)框架:

把实体类和数据库的记录做映射

比如:数据库   

Id   name  age

1 zhangsan  18

映射为对象:Student s = new Student(1,”zhangsan”,18);

或者把对象映射为数据库的一条记录。

二、环境搭建

 mybatis的配置文件

<?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 default="development"> 
		<environment id="development">
			<!-- 使用jdbc方式控制事务 -->
			<transactionManager type="JDBC"/> 
			<!-- mybatis提供的连接池链接数据
			  未来:mybatis+spring+sprignmvc  这一步交给spring
			 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/> 
				<property name="url" value="jdbc:mysql:///mydb?unicode=true&amp;characterEncoding=utf-8"/>
				<property name="username" value="root"/> 
				<property name="password" value="111111"/>
			</dataSource> 
		</environment>
	</environments>
	<!-- 指定映射文件 -->
	<mappers>
	<mapper resource="com/tf/domain/UsersMapper.xml"></mapper>
	</mappers>
</configuration>

编写映射文件   resultType:指定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">
<mapper namespace="com.tf.domain.Users">
<!-- 根据selectById名查询用户 -->
<select id="selectById" parameterType="int" resultType="com.tf.domain.Users">
    select * from users where id=#{id}
</select>
<!-- 全查   resultType:指定sql语句的结果集 (每一行对应的结果) -->
<select id="findAll" resultType="com.tf.domain.Users">
select * from users
</select>
<insert id="saveUsers" parameterType="com.tf.domain.Users">
insert into users(name,password,status,createDate)
values(#{name},#{password},#{status},#{createDate})
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
<update id="updateUser" parameterType="com.tf.domain.Users"> 
update users set name=#{name},password=#{password},status=#{status},createDate=#{createDate}
where id=#{id}
</update>
</mapper>

 实体类与数据库的字段一致:

测试类:

public class Test {
public static void main(String[] args) {
	//指定配置文件
		String config="mybatisConfig.xml";
		//2、读取mybatis的映射文件
		try {
			Reader reader = Resources.getResourceAsReader(config);
		   //3、构建sqlSessionFacotry对象
			SqlSessionFactory sqlSessionFactory  =new SqlSessionFactoryBuilder().build(reader);
			//通过sqlSessionFactory 获取sqlSession
			SqlSession  sqlSession=  sqlSessionFactory.openSession();
			//5、通过sqlSession调用映射文件中的sql语句
			//根据映射文件的id,查找
			Users u = sqlSession.selectOne("selectById",1);
			System.out.println(u);
			System.out.println("-----------------------");
			List<Users> list = sqlSession.selectList("findAll");
			for (Users users : list) {
				System.out.println(users);
			}
			System.out.println("-----------------------");
			Users u1 = new Users();
			u1.setName("美丽");
			u1.setPassword("admin");
			u1.setStatus(1);
			u1.setCreateDate(Date.valueOf("2012-2-1"));
		System.out.println( sqlSession.insert("saveUsers",u1)>0?"新增成功":"新增失败");
		System.out.println( sqlSession.delete("deleteUser",1)>0?"删除成功":"删除失败");
		System.out.println("-----------------------");
		u1.setId(2);
       System.out.println( sqlSession.update("updateUser",u1)>0?"修改成功":"修改失败");
			sqlSession.commit();
			sqlSession.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
}			
}

三、新增时返回主键

方法一: 使用selectKey节点配置

配置返回自增主键  把主键封装到参数的id字段

keyProperty:实体类中主键的属性名
keyColumn:数据库中主键的列名
order:执行该语句的时机
resultType:该sql语句的返回值类型

<!-- 新增+返回自增主键 -->
<insert id="saveUsersAndRuturnId" parameterType="com.tf.domain.Users">
<selectKey keyProperty="id" keyColumn="id" order="AFTER" resultType="int">
select last_insert_id()
</selectKey>
insert into users(name,password,status,createDate)
values(#{name},#{password},#{status},#{createDate})
</insert>

测试:

	        System.out.println("新增前id "+u1.getId());
			sqlSession.insert("saveUsersAndRuturnId" ,u1);
			System.out.println("新增后id "+u1.getId());

方法二:useGeneratedKeys="true"

<insert id="saveUsersAndRuturnId" parameterType="com.tf.domain.Users" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into users(name,password,status,createDate)
values(#{name},#{password},#{status},#{createDate})
</insert>

四、主键返回值UUID

当主键id为String时,可以使用UUID,来生成唯一的id

<insert id="saveUsersAndRuturnId" parameterType="com.tf.domain.Users1">
<selectKey keyColumn="id" keyProperty="id" resultType="String" order="BEFORE">
select UUID()
</selectKey>
	insert into users1(id,name,password,status,createDate)
	values(#{id},#{name},#{password},#{status},#{createDate})
</insert>

猜你喜欢

转载自blog.csdn.net/weixin_42496678/article/details/82857488