第三十八章:MyBatis框架之傳統方式mybatis的增,刪,改,查實現03

傳統方式mybatis的增,刪,改,查實現

準備工作
創建java Project項目,建庫建表插入數據,到數據庫中執行,導入jar包
添加mybatis的核心jar
添加mysql數據庫連接驅動
添加log4j日記需要的核心jar
在config目錄下添加 log4j.propreties代碼:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

開始編寫
在config目錄下添加 mybatis-config.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 是配置多個jdbc環境 
		default表示使用的默認環境 
	 -->
	<environments default="development">
		<!-- 
			environment 標籤用來配置一個環境 
				id 是環境的標識
		 -->
		<environment id="development">
			<!-- 
				transactionManager	配置使用什麼樣類型的數據庫事務管理
					 type="JDBC"  	表示啓用事務,有commit和rollback操作
					 type="MANAGED" 表示不直接控制事務。交給容器處理幾乎不用。
			 -->
			<transactionManager type="JDBC" />
			<!-- 
				dataSource標籤配置連接池
					type="POOLED"	表示啓用數據庫連接池
					type="UNPOOLED"	表示不啓用數據庫連接池
			 -->
			<dataSource type="POOLED">
				<!-- 連接數據庫的驅動類 -->
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<!-- 數據庫訪問地址 -->
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<!-- 數據庫用戶名 -->
				<property name="username" value="root" />
				<!-- 數據庫密碼 -->
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<!-- 導入mapper配置文件 -->
		<mapper resource="com/pojo/UserMapper.xml" />
	</mappers>
</configuration>

創建一個UserDao接口

public interface UserDao {
	// 保存用戶
	public int saveUser(User user);    
	// 更新用戶
	public int updateUser(User user);    
	// 根據id刪除用戶
	public int deleteUserById(int id);    
	// 根據id搜索用戶
	public User findUserById(int id);    
	// 搜索全部用戶
	public List<User> findUsers();    
}

編寫UserMapper.xml中的配置

<?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屬性是名稱空間的意思。
  	功能相當於 給配置文件定義一個包名。
  	一般情況下。可以寫兩種值,一種是對應類的全類名
  	一種情況是。對應類的處理接口全類名
   -->
<mapper namespace="com.pojo.User">
	<!-- 插入用戶
    parameterType 屬性設置參數類型
    id 爲使用的標識
 	-->
	<insert id="saveUser" parameterType="com.pojo.User">
		insert into t_user(last_name,sex) values(#{lastName},#{sex})
	</insert>
	<!-- 更新用戶 
    parameterType 屬性設置參數類型
    id 爲使用的標識
    -->
	<update id="updateUser" parameterType="com.pojo.User">
		update t_user
			set
		last_name = #{lastName},
		sex = #{sex}
			where
		id = #{id}
	</update>
	<!-- 根據id刪除用戶
    parameterType 屬性設置參數類型
    id 爲使用的標識        
     -->
	<delete id="deleteUserById" parameterType="int">
		delete from t_user where id = #{id}
	</delete>
	<!-- 根據id搜索用戶
    parameterType 屬性設置參數類型
    id 爲使用的標識 
    resultType 屬性是返回的類型
     -->
	<select id="findUserById" parameterType="int" resultType="com.pojo.User">
		select id,last_name lastName,sex from t_user where id = #{id}
	</select>
	<!-- 搜索全部用戶
    id 爲使用的標識 
    resultType 屬性是返回的類型
     -->
	<select id="findUsers" resultType="com.pojo.User">
		select id,last_name lastName,sex from t_user
	</select>
</mapper>

UserDaoImpl代碼:

public class UserDaoImpl implements UserDao {

	SqlSessionFactory sqlSessionFactory;

	public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
		this.sqlSessionFactory = sqlSessionFactory;
	}
	
	@Override
	public int saveUser(User user) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		int result = 0;
		try {
			result = sqlSession.insert("com.pojo.User.saveUser", user);
			//提交事務
			sqlSession.commit();
		} finally {
			sqlSession.close();
		}
		return result;
	}

	@Override
	public int updateUser(User user) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		int result = 0;
		try {
			result = sqlSession.update("com.pojo.User.updateUser", user);
			//提交事務
			sqlSession.commit();
		} finally {
			sqlSession.close();
		}
		return result;
	}

	@Override
	public int deleteUserById(int id) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		int result = 0;
		try {
			result = sqlSession.delete("com.pojo.User.deleteUserById", id);
			//提交事務
			sqlSession.commit();
		} finally {
			sqlSession.close();
		}
		return result;
	}

	@Override
	public User findUserById(int id) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		User result = null;
		try {
			result = sqlSession.selectOne("com.pojo.User.findUserById", id);
			//提交事務
			sqlSession.commit();
		} finally {
			sqlSession.close();
		}
		return result;
	}

	@Override
	public List<User> findUsers() {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		List<User> result = null;
		try {
			result = sqlSession.selectList("com.pojo.User.findUsers");
			//提交事務
			sqlSession.commit();
		} finally {
			sqlSession.close();
		}
		return result;
	}
}

測試類:

public class UserDaoTest {

	static UserDao userDao;

	/**
	 * @BeforeClass標註的方法會在所有測試之前執行之前執行一次
	 * @throws Exception
	 */
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		String url = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(url);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		userDao = new UserDaoImpl(sqlSessionFactory);
	}

	@Test
	public void testSaveUser() {
		userDao.saveUser(new User(null,"admins",0));
	}

	@Test
	public void testUpdateUser() {
		userDao.updateUser(new User(2, "admin", 1));
	}

	@Test
	public void testDeleteUserById() {
		userDao.deleteUserById(2);
	}

	@Test
	public void testFindUserById() {
		System.out.println(userDao.findUserById(1));
	}

	@Test
	public void testFindUsers() {
		System.out.println(userDao.findUsers());
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章