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. 项目目录结构:
阅读全文
1 0
- java连接数据库方式(三):MyBatis 与Spring整合
- mybatis与spring整合(方式一)
- mybatis与spring整合(方式二)
- spring 与mybatis的三种整合方式
- spring mybatis 整合的三种方式
- Spring整合Mybatis的三种方式
- Spring整合Mybatis的方式三
- Mybatis与Spring整合连接MySQL
- Spring 与 myBatis的一种整合方式
- spring与mybatis三种整合方法
- spring与mybatis三种整合方法
- spring与mybatis三种整合方法
- spring与mybatis三种整合方法
- spring与mybatis三种整合方法
- spring与mybatis三种整合方法
- spring与mybatis三种整合方法
- spring与mybatis三种整合方法
- spring与mybatis三种整合方法
- CentOS 64位 安装openfire
- PAT 1009. 说反话 (20)
- DDMS进行Pull文件报错Failed to pull selection: open failed: Permission denied的解决方法
- c语言大数乘法各位相加问题
- 1.1数组和链表:189. Rotate Array(Leetcode)
- java连接数据库方式(三):MyBatis 与Spring整合
- 剑指offer[一]:二维数组中的查找(java和c++版本)
- 黑马java全套视频教程 黑马javaee传智播客 32期 28期+20套项目
- DOS窗口的一些简单介绍
- python文件和异常
- c++stl的bitset位集合容器
- HTML5拖拽
- 怎么解决VMware“该虚拟机似乎正在使用中”问题
- linux下mysql的安装