工作日志4-20

工作日志4-20

研究mybatis+springmvc怎么实现简单增删改查,思路是:首先查询条件我们需要通过View层,用户提交请求用表单接收查询条件,Post提交给对应SpringMVC的Controller;Controller接受参数,调用业务逻辑层(Service层)方法,业务逻辑层对参数进行处理后交给数据访问层(DAO层)在数据库中查询。查询的数据返回Service层,再返回给Controller;然后我们就可以让Controller的Model携带这些数据,转发到一个视图,给用户展示信息!

例子网上找的:

实现具体的增删改查,不去部署Web war的时候我们用Junit单元测试CRUD功能。代码如下:

 applicationContext.xml配置文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<? 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:p = "http://www.springframework.org/schema/p"
     xmlns:aop = "http://www.springframework.org/schema/aop" xmlns:tx = "http://www.springframework.org/schema/tx"
     xmlns:context = "http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-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/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
     <!-- 引入jdbc.properties -->
     < context:property-placeholder location = "classpath:jdbc.properties" />
      
     <!-- 扫描文件  自动将service层和dao层组件注入 -->
     < context:component-scan base-package = "com.clark.service" ></ context:component-scan >
     < context:component-scan base-package = "com.clark.dao" ></ context:component-scan >
</ beans >

 

jdbc.properties配置文件
1
2
3
4
jdbc_driverClassName=oracle.jdbc.driver.OracleDriver
jdbc_url=jdbc:oracle:thin:@172.30.0.125:1521:oradb01
jdbc_username=settlement
jdbc_password=settlement

 

mybatis-config.xml配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
<? 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 >
     < typeAliases >
         <!-- give a alias for model -->
         < typeAlias alias = "goods" type = "com.clark.model.Goods" ></ typeAlias >
     </ typeAliases >
     < mappers >
         <!-- <mapper resource="com/clark/model/goodsMapper.xml" /> -->
     </ mappers >
</ configuration >

 

spring-mybatis.xml配置文件如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<? 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:p = "http://www.springframework.org/schema/p"
   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:util = "http://www.springframework.org/schema/util"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-3.2.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
     http://www.springframework.org/schema/util
     http://www.springframework.org/schema/util/spring-util-3.2.xsd">
      
     < bean id = "goodsServiceImpl" class = "com.clark.service.impl.GoodsServiceImpl" >
     </ bean >
          
     < bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource" >
         < property name = "driverClassName" >
           < value >${jdbc_driverClassName}</ value >
         </ property >
         < property name = "url" >
           < value >${jdbc_url}</ value >
         </ property >
         < property name = "username" >
           < value >${jdbc_username}</ value >
         </ property >
         < property name = "password" >
           < value >${jdbc_password}</ value >
         </ property >
         <!-- 连接属性 -->
         < property name = "connectionProperties" >
           < value >clientEncoding=UTF-8</ value >
         </ property >
     </ bean >
       
     <!-- mybatis文件配置,扫描所有mapper文件 -->
       < bean id = "sqlSessionFactory"
           class = "org.mybatis.spring.SqlSessionFactoryBean"
           p:dataSource-ref = "dataSource"
           p:configLocation = "classpath:mybatis-config.xml"
           p:mapperLocations = "classpath:mapper/*.xml" /> <!-- configLocation为mybatis属性 mapperLocations为所有mapper-->
         
     <!-- spring与mybatis整合配置,扫描所有dao.impl -->
         < bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer"
             p:basePackage = "com.clark.dao.impl"
             p:sqlSessionFactoryBeanName = "sqlSessionFactory" />
          
     <!-- 对数据源进行事务管理 -->
         < bean id = "transactionManager"
             class = "org.springframework.jdbc.datasource.DataSourceTransactionManager"
             p:dataSource-ref = "dataSource" />
</ beans >

 

goodsMapper.xml配置文件如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<? 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 = "clark" >
     <!-- 将db查询出来的结果映射到Model Goods -->
     < resultMap type = "com.clark.model.Goods" id = "t_good" >
         < id column = "id" property = "id" />
         < result column = "cate_id" property = "cateId" />
         < result column = "name" property = "name" />
         < result column = "price" property = "price" />
         < result column = "description" property = "description" />
         < result column = "order_no" property = "orderNo" />
         < result column = "update_time" property = "updateTime" />
     </ resultMap >
     <!-- 根据id查询 返回Goods类型  <typeAlias alias="goods" type="com.clark.model.Goods"></typeAlias>-->
     <!--resultMap 和   resultType的使用区别-->
     < select id = "selectGoodById" parameterType = "int" resultMap = "t_good" >
         select id,cate_id,name,price,description,order_no,update_time 
         from goods where id = #{id}
     </ select >
     <!-- 查询所有Goods 返回resultMap类型-->
     < select id = "selectAllGoods" resultMap = "t_good" >
         select id,cate_id,name,price,description,order_no,update_time from goods
     </ select >
     <!-- 指定parameterType=map 其中map的形式为Map<String,PageBean> map-->
     < select id = "selectGoodsByPage" resultMap = "t_good" parameterType = "map" >
         <!-- order by id asc是指对查询后的结果进行升序排序 -->
         <![CDATA[ 
             select * from 
             (select g.*,rownum rn from (select * from goods) g where 1=1 and rownum <= #{pageBean.endNumber}) 
             where rn >= #{pageBean.startNumber}
             order by id asc
         ]]>
     </ select >
     <!-- 新增Goods 参数类型为Goods-->
     < insert id = "insertGood" parameterType = "goods" >
         insert into goods(id,cate_id,name,price,description,order_no,update_time)  
         values(#{id},#{cateId},#{name},#{price},#{description},#{orderNo},#{updateTime})
     </ insert >
     <!-- 更新Goods 参数类型为Goods-->
     < update id = "updateGood" parameterType = "goods" >
         update goods g 
         set g.name = #{name},g.order_no =#{orderNo}
         where g.id = #{id}
     </ update >
     <!-- 删除Goods 参数类型为int-->
     < delete id = "deleteGood" parameterType = "int" >
         delete from goods g 
         where g.id = #{id}
     </ delete >
</ mapper >

 

Model ----Goods.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package com.clark.model;
  
import java.util.Date;
  
public class Goods {
     private Integer id;
     private Integer cateId;
     private String name;
     private double price;
     private String description;
     private Integer orderNo;
     private Date updateTime;
      
     public Goods(){
          
     }
      
     public Goods(Integer id, Integer cateId, String name, double price,
             String description, Integer orderNo, Date updateTime) {
         super ();
         this .id = id;
         this .cateId = cateId;
         this .name = name;
         this .price = price;
         this .description = description;
         this .orderNo = orderNo;
         this .updateTime = updateTime;
     }
  
  
     public Integer getId() {
         return id;
     }
  
  
     public void setId(Integer id) {
         this .id = id;
     }
  
  
     public Integer getCateId() {
         return cateId;
     }
  
  
     public void setCateId(Integer cateId) {
         this .cateId = cateId;
     }
  
  
     public String getName() {
         return name;
     }
  
  
     public void setName(String name) {
         this .name = name;
     }
  
  
     public double getPrice() {
         return price;
     }
  
  
     public void setPrice( double price) {
         this .price = price;
     }
  
  
     public String getDescription() {
         return description;
     }
  
  
     public void setDescription(String description) {
         this .description = description;
     }
  
  
     public Integer getOrderNo() {
         return orderNo;
     }
  
  
     public void setOrderNo(Integer orderNo) {
         this .orderNo = orderNo;
     }
  
  
     public Date getTimeStamp() {
         return updateTime;
     }
  
  
     public void setTimeStamp(Date updateTime) {
         this .updateTime = updateTime;
     }
  
  
     @Override
     public String toString() {
         return "[goods include:Id=" + this .getId()+ ",name=" + this .getName()+
                 ",orderNo=" + this .getOrderNo()+ ",cateId=" + this .getCateId()+
                 ",updateTime=" + this .getTimeStamp()+ "]" ;
     }
}

 

PageBean.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.clark.util;
//模拟的一个分页对象PageBean
public class PageBean {
     //开始数
     private Integer startNumber;
     //结束数
     private Integer endNumber;
      
     public PageBean(){
          
     }
     public PageBean(Integer startNumber, Integer endNumber) {
         super ();
         this .startNumber = startNumber;
         this .endNumber = endNumber;
     }
     public Integer getStartNumber() {
         return startNumber;
     }
     public void setStartNumber(Integer startNumber) {
         this .startNumber = startNumber;
     }
     public Integer getEndNumber() {
         return endNumber;
     }
     public void setEndNumber(Integer endNumber) {
         this .endNumber = endNumber;
     }
}

 

GoodsDao.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.clark.dao;
  
import java.util.List;
import java.util.Map;
  
import com.clark.model.Goods;
import com.clark.util.PageBean;
  
public interface GoodsDao {
      
     public int insertGoods(Goods goods);
      
     public int updateGoods(Goods goods);
      
     public int deleteGoods(Integer id);
      
     public Goods findGoodById(Integer id);
     //find all
     public List<Goods> findAllGoods();
      
     public List<Goods> findGoodsByPage(Map<String,PageBean> map);
      
}

 

GoodsDaoImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.clark.dao.impl;
  
import java.util.List;
import java.util.Map;
  
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
  
import com.clark.dao.GoodsDao;
import com.clark.model.Goods;
import com.clark.util.PageBean;
@Service
public class GoodsDaoImpl implements GoodsDao{
     //注意SqlSessionFactory是mybatis操作数据库的session对象
     @Autowired
     private SqlSessionFactory sessionFactory;
      
     @Override
     public int insertGoods(Goods goods) {
         //clark--goodsMapper.xml 中命名空间name = clark,insertGood---insert id
         int result = sessionFactory.openSession().insert( "clark.insertGood" , goods);
         //mybatis事物需要手动提交,默认为false
         sessionFactory.openSession().commit();
         return result;
     }
     @Override
     public int updateGoods(Goods goods) {
         int result = sessionFactory.openSession().update( "clark.updateGood" , goods);
         //mybatis事物需要手动提交,默认为false
         sessionFactory.openSession().commit();
         return result;
     }
     @Override
     public int deleteGoods(Integer id) {
         int result = sessionFactory.openSession().delete( "clark.deleteGood" , id);
         //mybatis事物需要手动提交,默认为false
         sessionFactory.openSession().commit();
         return result;
     }
     @Override
     public Goods findGoodById(Integer id) {
         Goods goods = sessionFactory.openSession().selectOne( "clark.selectGoodById" ,id);
         return goods;
     }
     @Override
     public List<Goods> findAllGoods() {
         List<Goods> gg = sessionFactory.openSession().selectList( "clark.selectAllGoods" );
         return gg;
     }
     @Override
     public List<Goods> findGoodsByPage(Map<String, PageBean> map) {
         List<Goods> gg = sessionFactory.openSession().selectList( "clark.selectGoodsByPage" ,map);
         return gg;
     }
}

 

GoodsService.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.clark.service;
  
import java.util.List;
import java.util.Map;
  
import com.clark.model.Goods;
import com.clark.util.PageBean;
  
public interface GoodsService {
     public int insertGoods(Goods goods);
      
     public int updateGoods(Goods goods);
      
     public int deleteGoods(Integer id);
      
     public Goods findGoodById(Integer id);
     //find all
     public List<Goods> findAllGoods();
      
     public List<Goods> findGoodsByPage(Map<String,PageBean> map);   
}

 

GoodsServiceImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.clark.service.impl;
  
import java.util.List;
import java.util.Map;
  
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
  
import com.clark.dao.GoodsDao;
import com.clark.model.Goods;
import com.clark.service.GoodsService;
import com.clark.util.PageBean;
@Service
public class GoodsServiceImpl implements GoodsService{
     @Autowired
     private GoodsDao goodsDao;
     @Override
     public int insertGoods(Goods goods) {
         return goodsDao.insertGoods(goods);
     }
     @Override
     public int updateGoods(Goods goods) {
         return goodsDao.updateGoods(goods);
     }
     @Override
     public int deleteGoods(Integer id) {
         return goodsDao.deleteGoods(id);
     }
     @Override
     public Goods findGoodById(Integer id) {
         return goodsDao.findGoodById(id);
     }
     @Override
     public List<Goods> findAllGoods() {
         return goodsDao.findAllGoods();
     }
     @Override
     public List<Goods> findGoodsByPage(Map<String, PageBean> map) {
         return goodsDao.findGoodsByPage(map);
     }
  
}

 

单元测试类如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package maven;
  
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
  
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
  
import com.clark.model.Goods;
import com.clark.service.GoodsService;
import com.clark.util.PageBean;
  
public class GoodsTest {
     private GoodsService goodsService;
      
     @Before
     public void before(){                                                                   
         @SuppressWarnings ( "resource" )
         ApplicationContext context = new ClassPathXmlApplicationContext( new String[]{ "classpath:applicationContext.xml"
                 , "classpath:spring-mybatis.xml" });
         //注意此处的beanName 必须与XXXXServiceImpl implements XXXXService的名字相同,而且第一个字母必须小写,否则找不到bean
         goodsService = (GoodsService) context.getBean( "goodsServiceImpl" );
     }
     @Test
     public void testFindGoodsById(){
         Goods goods = goodsService.findGoodById( 18 );
         System.out.println(goods.toString());
     }
     @Test
     public void testFindAllGoods(){
         List<Goods> goods = goodsService.findAllGoods();
         for (Goods goods2 : goods) {
             System.out.println(goods2.toString());
         }
     }
     @Test
     public void testFindGoodsByPage(){
         PageBean pageBean = new PageBean( 8 , 20 );
         Map<String,PageBean> map = new HashMap<String,PageBean>();
         map.put( "pageBean" , pageBean);
         List<Goods> goods = goodsService.findGoodsByPage(map);
         for (Goods goods2 : goods) {
             System.out.println(goods2.toString());
         }
     }
     @Test
     public void testAddGoods(){
         Goods user = new Goods( 20 , 23 , "oooo" , 23.03 , "this is one" , 5 , new Date());
         System.out.println( "111111111" );
         System.out.println(goodsService.insertGoods(user));
     }
     @Test
     public void testUpdateGoods(){
         Goods goods = goodsService.findGoodById( 18 );
         goods.setName( "AOAO" );
         goods.setOrderNo( 26 );
         System.out.println(goodsService.updateGoods(goods));
     }
      
}

 

接着将Mybatis集成SpringMVC中,部署成网页版的小功能实现:
spring-mvc.xml配置如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<? xml version = "1.0" encoding = "UTF-8" ?>
< beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:p = "http://www.springframework.org/schema/p"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:mvc = "http://www.springframework.org/schema/mvc"
   xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-3.2.xsd
     http://www.springframework.org/schema/mvc
     http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
      
     < mvc:annotation-driven />
     <!-- 扫描组件controller -->
     < context:component-scan base-package = "com.clark.controller" />
     <!-- 配置模型视图添加前后缀 -->
     < bean id = "viewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver"
         p:prefix = "/jsp/" p:suffix = ".jsp" />
</ beans >

 

web.xml配置如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<!DOCTYPE web-app PUBLIC
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd" >
  
< web-app >
   < display-name >Archetype Created Web Application</ display-name >
    
   <!-- 读取spring配置文件 -->
     < context-param >
         < param-name >contextConfigLocation</ param-name >
         < param-value >classpath:applicationContext.xml;
             classpath:spring-mybatis.xml
         </ param-value >
     </ context-param >
     <!-- 设计路径变量值 -->
     < context-param >
         < param-name >webAppRootKey</ param-name >
         < param-value >springmvc.root</ param-value >
     </ context-param >
   
   
     <!-- Spring字符集过滤器 -->
     < filter >
         < filter-name >SpringEncodingFilter</ filter-name >
         < filter-class >org.springframework.web.filter.CharacterEncodingFilter</ filter-class >
         < init-param >
             < param-name >encoding</ param-name >
             < param-value >UTF-8</ param-value >
         </ init-param >
         < init-param >
             < param-name >forceEncoding</ param-name >
             < param-value >true</ param-value >
         </ init-param >
     </ filter >
     < filter-mapping >
         < filter-name >SpringEncodingFilter</ filter-name >
         < url-pattern >/*</ url-pattern >
     </ filter-mapping >
   
     < listener >
         < listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class >
     </ listener >
   
     <!-- springMVC核心配置 -->
     < servlet >
         < servlet-name >spring</ servlet-name >
         < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class >
         < init-param >
             < param-name >contextConfigLocation</ param-name >
             < param-value >classpath:spring-mvc.xml</ param-value >
         </ init-param >
         < load-on-startup >2</ load-on-startup >
     </ servlet >
     < servlet-mapping >
         < servlet-name >spring</ servlet-name >
         < url-pattern >*.do</ url-pattern >
     </ servlet-mapping >
   
     < welcome-file-list >
         < welcome-file >index.jsp</ welcome-file >
     </ welcome-file-list >
   
     <!-- 错误跳转页面 -->
     < error-page >
         <!-- 路径不正确 -->
         < error-code >404</ error-code >
         < location >/WEB-INF/errorpage/404.jsp</ location >
     </ error-page >
</ web-app >

 

简单的Controller类如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.clark.controller;
  
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
  
@Controller
@RequestMapping ( "/" )
public class GoodsController {
     @RequestMapping ( "index" )
     public String index(){
         return "index" ;
     }
}
 
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值