java连接数据库方式(三):MyBatis 与Spring整合

来源:互联网 发布:数据库一致性错误修复 编辑:程序博客网 时间:2024/06/15 21:10

只有将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 */@Servicepublic 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. 项目目录结构:

这里写图片描述

原创粉丝点击