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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章