spring整合mybatis再整合spring-mvc的思路

首先,为什么要整合两者呢
是因为spring可以通过单例方式管理sqlsessionfactory
spring 和mybatis整合生成代理对象,使用sqlsessionfactory创建sqlsession(spring和mybatis整合自动完成)
持久层的mapper都需要由spring来管理

要导入的jar包
在这里插入图片描述
连接数据库的用ojdbc12.jar
spring校验器的要就自己加,json
有缓存就到mybatis

第一步先搭配mybatis环境,
先创个SqlMapConfig.xml
1.读取外部文件db.properties
2.延迟加载,不要就不加
3.配别名(配别名的原因就是:在sql配置映射的xml中引用实体类时,要写上实体类的全类名,就是包名+类名,这样写比较麻烦,在这里配置了之后,在需要用到类的地方都可以用别名来代替)
4.配置sql语句mapper映射文件
什么叫基于mapper代理呢,简而言之就是没有实现类
(这里有两种配置方式:
单个文件的配置
1.mapper:resource=“EmpMapper.xml的位置”/
2.基于mapper代理方式

批量扫描所有的xml文件,也是基于mapper代理方式


创建dao层
原始dao就有个接口,还有对应的实现类
你想返回一个对象,就创个emp对象
在bean里创个emp对象类
要想连接数据库查找就要在dao层里创一个empMapper映射文件
写select方法的时候,创个id,传个empno参数查询的话就在parameterType里写个int ,查到返回的是emp对象就把包的名写进来
在emp实现类里获取sqlSessionFactory接口

  1. new一个sqlsessionfactoryBuilder,调里面的build方法,再通过
    Resources.getResourceAsStream找到SqlMapConfig.xml,在这里就能拿到工厂,这里只需要加载一次,
    2.获取SqlSession接口,就可以连接数据库会话了
    SqlSession session=factory.openSession();
    3.调用获取方法
    只查一条就selectOne,查list就selectList
    session.selectOne(“对应EmpMapper.xml的语句”,“要传进来的参数值”),这里就能拿到一个Emp对象了,由于它返回的是Object,就强转成Emp对象
    4.关闭session

写一个测试类来测试;
由于sqlsessionfactory只要实例化一次,就可以通过传值方法传进来,节省内存
就在测试类中new出来,new EmpDaoImpl(factory)向上转成接口 Emp dao,因为我们是面向接口编程。 dao里有select方法,再传个empno进来

在这里已经测试好了mybatis环境,接着就是整合spring
用mybatis写的时候,在测试类里它new了工厂,还有new了一个dao对象,现在要用spring把它们管理起来,用spring把它们创建出来
第一步,先建一个applicationContext.xml文件
先把工厂管理进来,就是sqlSessionfactory,要拿到这个工厂就要先连接数据库,就是先把数据库配置进来先,在mybatis中配置数据库是在sqlmapconfig.xml中配置的。所以
1.先加载外部配置文件db.propertes,交给spring管理是为了交给aop管理数据源事务
context:property-placeholder这个是用来加载外部文件的,里面有个方法location 指向db.properties文件位置 classpath:db.properties
2.然后配置数据源,DataSource
不用连接池就导入spring-jdbc的jar包,用连接池就就用dbcp连接

里面是property 装用户名密码 url是字符窜类型就用value
3.配置sqlsessionfactory
这里整合了sqlSessionFactory
<bean id="sqlsessionfactory class=“在整合的mybatis-springjar包里找”
配置数据源
<property name="dataSource ref="dataSource
配置mybatis核心配置文件路径
<property name=“configLocation” value=“classpath:SqlMapConfig.xml”
4.配置dao
这里整合了new empDao(factory)
<bean id=“empDao” class="daoimpl地址
《constructor-arg name=“factory”(这里的名字要和Emp实现类传进来的sqlsessionfactory 的factory一样) ref="sqlSessionFactory》
这里传factory
spring就自己加载application,mybatis就自己加载SqlMapConfig.xml

test类:
1.加载并解析applicationContext.xml,获取BeanFactory
new ClasssPathXmlApplicationContext(“applicationContext.xml”);
2.获取bean
factory.getBean(这里就是applicationContext.xml配置的bean的id)
然后向上转型,IEmpDao 再调select方法传个empno ,返回emp对象

上面已经把spring和mybatis整合进来了

上面不是web项目,加上springmvc才是
第一步先导入jar包,三个框架的jar包
先写个jsp,弄个form表单,给用户输入编号查询

如下情况使用GET方法:客户端与服务端的交互像是一个提问(如查询操作、搜索操作、读操作)
如下情况使用POST方法:
1.交互是一个命令或订单(order),比提问包含更多信息
2.交互改变了服务器端的资源并被用户察觉,例如订阅某项服务
3.用户需要对交互产生的结果负责
根据HTTP协议规定,GET方法可以携带交互需要的所有数据,因此你会看到搜索百度或谷歌的时候,点击搜索形成的URL包含了你刚才的搜索关键字,没有安全需求的请求把信息放URL里没关系,但是你访问银行网站的时候,不希望把账户、密码这些放在URL里被人拦截是吧,所以HTTP设计了POST请求,他可以把请求信息放在HTTP请求里,具体格式这里不细说了,这样你就不能简单的从URL里找到账户、密码了。
action是交给web.xml的前端控制器接收请求
web.xml
1.配置前端控制器
servlet
servlet-name springMVC 这里的名字要和mapping里面保持大小写一致
servlet-class web.servlet.DisspatcherServlet(按住ctrl能进去)
这里要配置springmvc.xml的路径
init-param 初始化参数
参数名称contextConfigLocation
参数值classpath:spring-mvc.xml
servlet-mapping
servlet-name springMVC
url-pattern *.action 这些请求交给前端控制器处理

 配置spring-mvc.xml
 配置处理器适配器,处理器映射器
 《mvc:annotation-driven   开启注解
 批量扫描所有主键 就是controller,service,本来还要扫描dao,现在已经在applicationContext.xml里配置了,交给了spring容器
 context:component-scan base- package="要扫描的包"
 3.视图解析器
 bean class="web.servlet.view intervalResourceViewResolver
 <property name="prefix" value="/"  这里是前缀
 <property name="suffix" value=".jsp"

接着就定义controller ,第一先加@controller,加了才能被spring-mvc.xml文件扫描到,配置请求的路径 @RequestMapping("/select") 返回给jsp名字页面
controller要调用service 可以用@Autowired适用于一个实现类,不然要加@qualifier(“empService”)它要用这个对象
要么就用@Resource(name=“empService”)两种方法
private service
写个方法名然后@RequestMapping()
调用service的方法获取emp对象
接着保存到request作用域,这里是用model
先定义接口,再定义实现类
实现类就要加注解@Service
service实现类就要调用dao层的方法
Request(name=“empDao”) 这里是applicationContext管理bean的id

代码打到这里,发现spring的环境没加载进来,就要在web.xml配置
spring的核心文件路径,applicationContext.xml
context-param
param-name contextConfigLocation
param-value classpath:application.xml
spring的监听器
listenner
listenner-class context.contextloaderlistener

首先,启动tomcat服务器,web.xml就会先解析
在web.xml里面有applicationContext.xml解析完
生成spring容器,写好了dao层
发完请求就解析spring-mvc的文件,就顺便把controller,service加载好了
再调dao层的方法就是mybatis的功能了
然后调用数据库,找到empMapper.xml,执行数据库结果,返回给dao,再返回给service再返回给controller,controller再保存到request,界面就有数据了

由于每个dao的实现类都要用到sqlsessionFactory,那么我们就继承sqlsessiondaosupport这个类,可以直接this.getsqlsession取到sqlsession
这样你不需要获取连接,不需要关闭事务,提交事务,这个类已经帮我们管理好了
所以在applicationContext.xml中就在配置dao层中把构造函数那个去掉,改成property name=“sqlsessionfactory(这个是底层代码的名字)” ref=“传的是上面sqlsession的对象”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值