1,昨天写了篇mybatis框架简单操作数据库,今天写着这篇博客与上篇的博客很相似,但是却是与spring容器的简单整合,
首先看一下整体的目录结构:
(1)导包:需要把spring框架的4+2核心包,和昨天的Mybatis包,以及两者整合的包(这儿就不详细的介绍了)
(2)还是昨天的java bean类和mapper配置文件。
package cn.zhong.mybatis.user;
public class User {
private int id;
private String loginName;
private String loginPwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
@Override
public String toString() {
return "User [id=" + id + ", loginName=" + loginName + ", loginPwd=" + loginPwd + "]";
}
}
Mybatis.xml (注意,namespace的值不是随便取的,是映射接口的路径,这个错误我找了好长时间)
<?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的值后面DAO层操作会用到,id的值是要查询的方法
#{} 这个相当于hibernate的?,是占位符,#{loginName}表示读入loginName的值放入。
-->
<mapper namespace="cn.zhong.mybatis.Dao.UserDao">
<select id="selectUserById" parameterType="Integer" resultType="cn.zhong.mybatis.user.User">
select * from User where id = #{id}
</select>
<select id="selectAllUser" resultType="cn.zhong.mybatis.user.User">
select * from User
</select>
<insert id="adduser" parameterType="cn.zhong.mybatis.user.User" >
insert into User(loginName,loginPwd) values(#{loginName},#{loginPwd})
</insert>
<update id="updateId" parameterType="cn.zhong.mybatis.user.User">
update User set loginName = #{loginName},loginPwd=#{loginPwd} where id = #{id}
</update>
<delete id="deleteUser" parameterType="cn.zhong.mybatis.user.User">
delete from User where id = #{id}
</delete>
</mapper>
映射接口:里面的方法参数与Mybatis相对应。上面还有一个知识点没弄明白(我一直以为是那个错误,结果不是,改了好长时间)
package cn.zhong.mybatis.Dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import cn.zhong.mybatis.user.User;
import org.apache.*;
import org.mybatis.spring.annotation.MapperScan;
//这个的作用,暂时没测试出来
//@MapperScan("cn/zhong/mybatis/user/Mybatis.xml")
@Repository("userDao")
public interface UserDao {
/*
* 接口方法对应的SQL映射文件,Mybatis.xml,方法名称与映射文件中的id的值一样
* 各个类型参数都要一致
* 返回值要一样,
* UserDao所在的路径和Mybatis.xml文件中 namespace的值一样
*/
public User selectUserById(Integer id);
public List<User> selectAllUser();
public int adduser(User user);
public int updateId(User user);
public int deleteUser(User user);
}
Mybatis的核心配置文件,功能较少没什么东西。
<?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">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis"/>
<property name="username" value="root"/>
<property name="password" value="AYZXX"/>
</dataSource>
</environment>
</environments> -->
<!-- 告诉mybatis到哪里去找映射文件 -->
<mappers>
<mapper resource="cn/zhong/mybatis/user/Mybatis.xml"/>
</mappers>
</configuration>
在编写一个UserController类,编写很多的方法,调用不同的接口方法(接口,不用实现,框架经帮我们实现,直接注入到spring 容器中),因为我只是学习和练习,因此只实现一个简单的功能。
package cn.zhong.mybatis.controller;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import cn.zhong.mybatis.Dao.UserDao;
import cn.zhong.mybatis.user.User;
@Controller("UserController")
public class UserController {
@Resource(name="userDao")
private UserDao userDao;
//单个查询
public void selectUserById(Integer id){
System.out.println(userDao);
User user = userDao.selectUserById(id);
System.out.println(user);
}
}
上面的准备齐全,下面开始spring框架的核心配置文件(代码中有很多注释,这儿就不多解释了) 。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!--自动扫描,使注解生效-->
<context:component-scan base-package="cn.zhong.mybatis.Dao"></context:component-scan>
<context:component-scan base-package="cn.zhong.mybatis.controller"></context:component-scan>
<!-- 配置数据源 -->
<bean id = "dataSource" class="org.apache.commons.dbcp.BasicDataSource ">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///mybatis"></property>
<property name="username" value="root"/>
<property name="password" value="AYZXX"/>
</bean>
<!-- 添加事物 -->
<bean id = "transactionmanager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 开启事物注解 -->
<tx:annotation-driven transaction-manager="transactionmanager"/>
<!-- 配置mybatis工厂,同时指定数据,并与mybatis完美整合 -->
<bean id = "sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 配置configLocation的属性为mybatis的核心配置文件 -->
<property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
</bean>
<!-- Mapper代理开发,使用Spring自动扫描Mybatis的接口并装配额 -->
<!-- spring将指定包中所有被@mapper注解标注的接口自动装配为mybatis的映射接口 -->
<bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- mybatis-spring组建的扫描器 -->
<property name="basePackage" value="cn.zhong.mybatis.Dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
</beans>
最后编写一个测试类:
package cn.zhong.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.annotation.Resource;
import javax.security.auth.login.AppConfigurationEntry;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.zhong.mybatis.Dao.UserDao;
import cn.zhong.mybatis.controller.UserController;
import cn.zhong.mybatis.user.User;
public class Demo1 {
@Test
public void fun1(){
ApplicationContext aapCon = new ClassPathXmlApplicationContext("applicationContext.xml");
UserController uc = (UserController) aapCon.getBean("UserController");
uc.selectUserById(1);
}
}
总结:这个是上一个Mybatis文件改写,与spring框架的整合,整体内容比较简单,比较容易。