java連接數據庫方式(三):MyBatis 與Spring整合

作者的個人分享網:分享時刻【www.itison.cn】

只有將MyBatis 與Spring整合才能體現出MyBatis的優勢(最起碼讓我們減少了很多代碼),這也是SSM框架整合後DAO層的最終形態

MyBatis 與Spring整合的步驟:

1. 創建項目導jar包(jar包必不能少)

2. 編寫spring-mybatis.xml配置文件,配置數據源等信息
spring-mybatis.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/context 
	 http://www.springframework.org/schema/context/spring-context.xsd	
     http://www.springframework.org/schema/aop 
     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 
	 
	  
	  <!-- 配置數據源 -->
	  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql:///user" />
		<property name="username" value="root" />
		<property name="password" value="123456" />
		<!-- 初始化連接大小 -->
		<property name="initialSize" value="0"></property>
		<!-- 連接池最大數量 -->
		<property name="maxActive" value="20"></property>
		<!-- 連接池最大空閒 -->
		<property name="maxIdle" value="20"></property>
		<!-- 連接池最小空閒 -->
		<property name="minIdle" value="1"></property>
		<!-- 獲取連接最大等待時間 -->
		<property name="maxWait" value="60000"></property>
	</bean>
	<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 自動掃描映射文件 -->
		<property name="mapperLocations" value="classpath:com/user/dao/*.xml"></property>
	</bean>
	
	<!-- DAO接口所在包名,Spring會自動查找其下的類 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.user.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
	</bean>
	
	<!-- 配置事務管理器  -->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<tx:annotation-driven transaction-manager="txManager"/>
	
	
</beans>

3. 配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>UserManager</display-name>
  
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
  
  
  <!-- mybatis配置 -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:spring-mybatis.xml</param-value>
  </context-param>
  
  
  <!-- 配置spring監聽 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  
</web-app>

4. DAO層接口:UserDao .java

package com.user.dao;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.user.bean.Page;
import com.user.bean.User;

/**
 *  This is User Dao
 * @author LIU
 * @version 1.0 2017-09-21
 */
public interface UserDao {

	/**
	 * Show all users
	 *TODO
	 *LIU
	 * @return
	 *上午10:49:57
	 */
	List<User> showAll();

	/**
	 * User login
	 *TODO
	 *LIU
	 * @param user
	 * @return boolean
	 *上午10:50:11
	 */
	int login(User user);

	/**
	 * Add user
	 *TODO
	 *LIU
	 * @param user
	 * @return int
	 *上午10:50:24
	 */
	int addUser(User user);

	/**
	 * Update user by Id
	 *TODO
	 *LIU
	 * @param user
	 * @param userId
	 * @return int
	 *上午10:50:40
	 */
	int updateUser(User user, String userId);

	/**
	 * Search user by Id
	 *TODO
	 *LIU
	 * @param userId
	 * @return User
	 *上午10:50:56
	 */
	User searchUser(String userId);

	/**
	 * Delete user by Id
	 *TODO
	 *LIU
	 * @param userId
	 * @return int
	 *上午10:51:06
	 */
	int deleteUser(String userId);

	/**
	 * Get all counts of users
	 *TODO
	 *LIU
	 * @return
	 *上午11:32:55
	 */
	int getAllCounts();

	/**
	 * Get user by page
	 *TODO
	 *LIU
	 * @param p
	 * @return
	 *上午11:44:17
	 */
	List<User> showAll(Page p);

}

6. DAO層接口對應的映射文件:UserDao .xml
(這裏只寫了幾個sql語句示例,並沒有將UserDao .java中所有方法寫全,有一點必須要注意,那就是SSM整合後省去了UserDaoImpl.java,所有sql語句的id一定必須是UserDao .java中的方法名)

<?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.user.dao.UserDao">

  <!-- 用戶登陸 -->
  <select id="login" parameterType="com.user.bean.User" resultType="int">
    select count(userid) 
    from user 
    where userid=#{userId} and password=#{password}
  </select>
  
  <!-- 獲取所有用戶的總記錄數 -->
  <select id="getAllCounts" parameterType="com.user.bean.User" resultType="int">
    select count(userid) 
    from user 
    where userid=#{userId}
  </select>
  

  <!-- 顯示全部賬單 -->
  <select id="showAll" parameterType="com.user.bean.Page" resultType="com.user.bean.User">
	select userid as userId,username as userName,password as password,sex as sex,age as age,idcard as idcard,phone as phone,address as address,email as email 
	from user order by userid
	limit #{start},#{currCount}
  </select>
 
  
</mapper>

7. 事務管理可以用註解的形式在ServiceImpl層寫:

package com.user.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.user.bean.Page;
import com.user.bean.User;
import com.user.dao.UserDao;
import com.user.service.UserService;

/**
 *  This is user service implements
 * @author LIU
 * @version 1.0 2017-09-21
 */
@Service
public class UserServiceImpl implements UserService {
	/**
	 * Create userDaoImpl object
	 */
	@Autowired
	UserDao userDao;
	
	public UserDao getUserDao() {
		return userDao;
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	/**
	 * show all users
	 */
	@Override
	@Transactional(readOnly=true)
	public List<User> showAll() {
		// TODO Auto-generated method stub
		return userDao.showAll();
	}

	/**
	 * user login
	 */
	@Override
	@Transactional(readOnly=true)
	public boolean login(User user) {
		// TODO Auto-generated method stub
		if(userDao.login(user) > 0){
			return true;
		}
		return false;
	}

	/**
	 * Add user
	 */
	@Override
	@Transactional(propagation=Propagation.REQUIRED)
	public int addUser(User user) {
		// TODO Auto-generated method stub
		return userDao.addUser(user);
	}

	/**
	 * Change user information
	 */
	@Override
	@Transactional(propagation=Propagation.REQUIRED)
	public boolean updateUser(User user, String userId) {
		// TODO Auto-generated method stub
		if(userDao.updateUser(user, userId) > 0){
			return true;
		}
		return false;
	}

	/**
	 * Search user by Id
	 */
	@Override
	@Transactional(readOnly=true)
	public User searchUser(String userId) {
		// TODO Auto-generated method stub
		return userDao.searchUser(userId);
	}

	/**
	 * Delete user by Id
	 */
	@Override
	@Transactional(propagation=Propagation.REQUIRED)
	public int deleteUser(String userId) {
		// TODO Auto-generated method stub
		return userDao.deleteUser(userId);
	}

	/**
	 * Get all counts of users
	 */
	@Override
	@Transactional(readOnly=true)
	public int searchAllCount() {
		// TODO Auto-generated method stub
		return userDao.getAllCounts();
	}

	
	/**
	 * Get user by page
	 */
	@Override
	@Transactional(readOnly=true)
	public List<User> getUserByPage(Page p) {
		// TODO Auto-generated method stub
		return userDao.showAll(p);
	}

}

8. 項目目錄結構:

這裏寫圖片描述

發佈了43 篇原創文章 · 獲贊 86 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章