1. 程式人生 > >【Mybatis】從安裝到簡單demo

【Mybatis】從安裝到簡單demo

一、Mybatis是什麼?

是一個持久層的框架,學習成本較低,使用sql語言。

二、Mybatis匯入jar包與配置檔案

2.1.1匯入jar包

需要mybatis的一系列jar包,jdbc  jar包,mysql jar包。

額外的,非必要的是log4j.jar

2.2.1配置檔案

1.對映配置檔案

<?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" />
			<!-- 資料庫連線池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="a" />
			</dataSource>
		</environment>
	</environments>

<!-- 這個地方配置實體類sql對映檔案 -->
	<mappers>
	<mapper resource="MapConfig\UserMapper.xml"/>
	
	</mappers>
</configuration>

2.配置實體類的sql對映檔案

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注意不要弄錯了,配置檔案是config,這個是對映mapper -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 加上名稱空間,可以起到隔離作用 -->
<mapper namespace="UserMapper">
<!-- id作為sql的一個唯一標示,parameterType是入參型別。框架會自動填充物件中的屬性到sql語句中。實體類屬性應與資料庫中欄位名相同。也可以有更高階的做法。這裡先說簡單的demo -->
<insert id="addUser" parameterType="com.test.domain.User">

insert into User (id,username) values (#{id},#{username})
</insert>

<update id="updateUser" parameterType="com.test.domain.User" >
update  user set username = #{username} where id =#{id}

</update>

<delete id="deleteUser" parameterType="Integer">
delete from user where id = #{id}
</delete>
<!-- resultType是返回值型別 -->
<select id="selectUser" parameterType="Integer" resultType="com.test.domain.User">
select id, username from user where id = #{id}
</select>

<select id="selectLikeUser" parameterType="String" resultType="com.test.domain.User">
select id, username from user where username like '%${value}%'
</select>

<select id="selectAllUser"  resultType="com.test.domain.User">
select id, username from user 
</select>




</mapper>

 

三、Mybatisdemo完成

1.實體類

package com.test.domain;

public class User {
private int id;
private String username;

private String password;

public String getPassword() {
	return password;
}
public void setPassword(String Password) {
	this.password = Password;
}

public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
@Override
public String toString() {
	return "User [id=" + id + ", username=" + username + "]";
}
public User(int id, String username) {
	super();
	this.id = id;
	this.username = username;
}
public User() {
	super();
}

}

2.測試類

package com.test.dao;

import java.io.IOException;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.test.domain.User;

public class UserDao {
	
	
	
	@Test
	public void addUser() throws Exception {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession sqlSession = sqlSessionFactory.openSession();
		User user = new User(2,"zs");
		sqlSession.insert("UserMapper.addUser", user);
		sqlSession.commit();
		sqlSession.close();	
	}
	@Test
	public void deleteUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		session.delete("UserMapper.deleteUser", 1);
		session.commit();
		session.close();
	}
	@Test
	public void updateUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		User user = new User(1,"zs1");
		session.update("UserMapper.updateUser", user);
		//session.delete("UserMapper.deleteUser", 1);
		
		
		
		session.commit();
		session.close();
	}
	@Test
	public void selectUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		
		//session.update("UserMapper.updateUser", user);
		//session.delete("UserMapper.deleteUser", 1);
		Object user1 =  session.selectOne("UserMapper.selectUser", 1);
		System.out.println(user1);
		
		session.commit();
		session.close();
	}
	@Test
	public void selectAllUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		
		//session.update("UserMapper.updateUser", user);
		//session.delete("UserMapper.deleteUser", 1);
		List<User> userList =  session.selectList("UserMapper.selectAllUser");
		for (User user : userList) {
			System.out.println(user);
		}
		
		session.commit();
		session.close();
	}
	
	@Test
	public void selectLikeUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		
		//session.update("UserMapper.updateUser", user);
		//session.delete("UserMapper.deleteUser", 1);
		List<User> userList =  session.selectList("UserMapper.selectLikeUser","z");
		for (User user : userList) {
			System.out.println(user);
		}
		
		session.commit();
		session.close();
	}
}

四、編寫demo中遇到的問題及解決方法

下面都是:序號+解決方法+遇到的問題報錯

1.正確配置xml的檔案頭。配置頭中主要的不同部分是config和Mapper

 Mapped Statements collection does not contain value for UserMapper.addUser

並且還要在配置檔案中包含對映檔案。

2.新增資料庫中已存在的資訊。(表中有主鍵,如ID為1,再新增ID為1的記錄)

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'

3.把ResultType誤寫成ResultMap。ResultType是直接自動對映類的屬性和表的欄位,需要同名。ResultMap是一種手動配置類的屬性和表字段的對映。

 

Mapped Statements collection does not contain value for UserMapper.selectLikeUser