接着上一个例子继续整合
结构图:
1. jar(用的以前的项目的jar 有些事多余的 没简化)
2. app.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.batis"></context:component-scan>
<context:property-placeholder location="classpath:db.properties"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<!-- <property name="prefix" value="WEB-INF/classes/com/batis/view/"></property> -->
<property name="prefix" value="WEB-INF/request/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
</bean>
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean>
<bean id="sqlsessionfactory" class="com.hotent.core.mybatis.SqlSessionFactoryFactoryBean">
<property name="configLocation" value="classpath:configuration.xml"></property>
<property name="dataSource" ref="datasource"></property>
</bean>
<bean id="txmanager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"></property>
</bean>
<tx:advice id="advice" transaction-manager="txmanager">
<tx:attributes>
<tx:method name="get*" propagation="NOT_SUPPORTED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* com.batis.dao.*.*(..))" id="pointcut"/>
<aop:advisor advice-ref="advice" pointcut-ref="pointcut"></aop:advisor>
</aop:config>
</beans>
最后的页面路径为controller的requestMapping+配置文件里的prefix+ModalAndView里的视图名+suffix
3. mybatis配置文件 configuration.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>
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="jdbc"/>
<dataSource type="pooled">
<property name="url" value="${url}"/>
<property name="driver" value="${driver}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/batis/data/MyUser.map.xml"/>
</mappers>
</configuration>
4. 数据库属性文件 db.properties
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=scott
password=sa
5. controller
package com.batis.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.batis.dao.BatisDao;
import com.batis.data.MyUser;
import com.batis.service.BatisService;
@Controller
@RequestMapping("")
public class MyUserController {
@Resource(name="service")
private BatisService service;
public BatisService getService() {
return service;
}
public void setService(BatisService service) {
this.service = service;
}
@RequestMapping("totest")
public ModelAndView toTest(){
MyUser user=new MyUser();
user.setAddress("c");
user.setName("c");
user.setAge(211);
List list=service.getbydy(user);
System.out.println(list.size());
Map<String, Object> map =new HashMap<String,Object>();
map.put("result", 0);
return new ModelAndView("result",map);
}
}
6. dao BaseDao
package com.batis.dao;
import java.io.IOException;
import java.io.Reader;
import javax.annotation.Resource;
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.springframework.stereotype.Repository;
@Repository
public class BaseDao {
@Resource(name="sqlsessionfactory")
private SqlSessionFactory factory=null;
public SqlSessionFactory getFactory() {
return factory;
}
public void setFactory(SqlSessionFactory factory) {
factory = factory;
}
private static ThreadLocal<SqlSession> sessions=new ThreadLocal<>();
public SqlSession getSession(){
SqlSession session=null;
if (sessions.get()!=null) {
session=null;
sessions.set(null);
}
session=factory.openSession();
sessions.set(session);
return session;
}
public void closeSession(){
SqlSession session=sessions.get();
if (session!=null) {
session.close();
session=null;
sessions.set(null);
}
}
}
BatisDao:
package com.batis.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import com.batis.data.MyUser;
@Repository("dao")
public class BatisDao extends BaseDao {
public int save(MyUser user){
SqlSession session=this.getSession();
session.insert("com.zhaowei.insertuser", user);
session.commit();
this.closeSession();
return 0;
}
public void update(MyUser user){
SqlSession session=this.getSession();
session.update("com.zhaowei.updateuser",user);
session.commit();
this.closeSession();
}
public void delete(long id){
SqlSession session=this.getSession();
session.delete("com.zhaowei.deleteuser", id);
session.commit();
this.closeSession();
}
public List getAll(){
SqlSession session=this.getSession();
List list=session.selectList("com.zhaowei.getalluser");
this.closeSession();
return list;
}
public List getByDy(MyUser user){
SqlSession session=this.getSession();
List list=session.selectList("com.zhaowei.getuserbydy", user);
this.closeSession();
return list;
}
public static void main(String[] args) {
try {
BatisDao bd=new BatisDao();
MyUser user=new MyUser();
user.setAddress("bb");
user.setName("bb");
user.setAge(21);
user.setId(1);
// bd.update(user); ok
// bd.save(user); ok
// List list=bd.getAll();
// System.out.println(list.size()); ok
// bd.delete(id) ok
List list=bd.getByDy(user);
System.out.println(list.size());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
7. 实体类 MyUser
package com.batis.data;
import com.batis.dao.BaseDao;
public class MyUser {
private int id;
private String name;
private String address;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
映射文件:MyUser.map.xml (名称随意 可以在configuration里配置)
<?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.zhaowei">
<resultMap type="com.batis.data.MyUser" id="myuser">
<id column="id" jdbcType="NUMERIC" property="id"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="address" property="address" jdbcType="VARCHAR"/>
<result column="age" property="age" jdbcType="NUMERIC"/>
</resultMap>
<sql id="columns">id,name,address,age</sql>
<sql id="dysql">
<where>
<if test="@Ognl@isNotEmpty(name)"> and name like '%${name}%'</if>
<if test="@Ognl@isNotEmpty(address)"> and address like '%${address}%'</if>
<if test="@Ognl@isNotEmpty(age)"> and age > ${age}</if>
</where>
</sql>
<insert id="insertuser" parameterType="com.batis.data.MyUser">
insert into myuser (<include refid="columns"/>) values (#{id},#{name},#{address},#{age})
</insert>
<delete id="deleteuser" parameterType="java.lang.Long" >
delete from myuser where id=#{id}
</delete>
<update id="updateuser" parameterType="com.batis.data.MyUser">
update myuser set name=#{name},address=#{address},age=#{age} where id=#{id}
</update>
<select resultType="com.batis.data.MyUser" id="getalluser" >
select <include refid="columns"/> from myuser
</select>
<select id="getuserbydy" resultMap="myuser" parameterType="com.batis.data.MyUser">
select <include refid="columns"/> from myuser
<include refid="dysql"/>
<if test="@Ognl@isEmpty(name)">
order by #{name} desc
</if>
</select>
</mapper>
8. service
package com.batis.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
import com.batis.dao.BatisDao;
import com.batis.data.MyUser;
@Repository("service")
public class BatisService {
@Resource(name="dao")
private BatisDao dao;
public BatisDao getDao() {
return dao;
}
public void setDao(BatisDao dao) {
this.dao = dao;
}
public List getAll(){
return dao.getAll();
}
public void save(MyUser user){
dao.save(user);
}
public List getbydy(MyUser user){
List list=dao.getByDy(user);
return list;
}
}
9. view
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
oh yes
</body>
</html>
10. WEB-INF里的页面 request/result.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
this is result jsp
</body>
</html>
测试过 可以用~ 注意吧Ognl.java放到src下 否则会报错