SpringMVC+Mybatis整合的增删改查

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
public interface UserDao {

/*

  • 查询

*/

public List selectAll();

public User findById(String id);

public User findByUserName(String userName);

public int countAll();

/*

  • 更新删除插入

*/

public int insert(User user);

public int update(User user);

public int delete(String userName);

/* //返回插入数据的ID

public int findInsertUserID(User user);*/

/*//批处理 插入多条数据

public void insertUsers(List users);*/

}

三、创建包com.szz.tables.xml(这样命名好像不好  定义com.szz.Mappers比较直观一点)   这个是用来写sql语句的xml文件

<?xml version="1.0" encoding="UTF-8" ?>

select * from SM_USER

select count(*) c from SM_USER

select * from SM_USER where ID=#{ID}

select * from SM_USER where NAME=#{NAME}

insert into SM_USER(ID,NAME,PASSWORD) VALUES(#{ID},#{NAME},#{PASSWORD})

update SM_USER

NAME=#{NAME},

PASSWORD=#{PASSWORD}

where ID=#{ID}

delete FROM SM_USER WHERE ID=#{ID}

命名空间定义为我们需要对应的DAO接口;这里每个方法的ID都跟DAO里面的方法一一对应;

还有说明一下

parameterType=“User”

如果你没有在mybatis配置文件里面定义别名  这样写就会报错   你要把全类名写清楚

四、spring的配置文件  spring-context.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:p=“http://www.springframework.org/schema/p”

xmlns:context=“http://www.springframework.org/schema/context”

xmlns:mvc=“http://www.springframework.org/schema/mvc”

xmlns:jee=“http://www.springframework.org/schema/jee”

xmlns:aop=“http://www.springframework.org/schema/aop”

xmlns:tx=“http://www.springframework.org/schema/tx”

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://www.springframework.org/schema/jee

http://www.springframework.org/schema/jee/spring-jee.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd">

<context:component-scan base-package=“com.szz”/>

<mvc:annotation-driven ignore-default-model-on-redirect=“true”/>

mvc:default-servlet-handler/

<property name=“mapperLocations”

value=“classpath:com/szz/tables/xml/*.xml” />

配置文件说明:  详情见http://www.blogjava.net/ldwblog/archive/2013/07/10/401418.html

在定义SqlSessionFactoryBean的时候,dataSource属性是必须指定的,它表示用于连接数据库的数据源。当然,我们也可以指定一些其他的属性,下面简单列举几个:

  • mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。

  • configLocation:用于指定Mybatis的配置文件位置。如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性指定的内容会覆盖该配置文件里面指定的对应内容。

  • typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔。

  • typeAliases:数组类型,用来指定别名的。指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名,前提是该类上没有标注@Alias注解,否则将使用该注解对应的值作为此种类型的别名。

    • plugins:数组类型,用来指定Mybatis的Interceptor。
  • typeHandlersPackage:用来指定TypeHandler所在的包,如果指定了该属性,SqlSessionFactoryBean会自动把该包下面的类注册为对应的TypeHandler。多个package之间可以用逗号或者分号等来进行分隔。

  • typeHandlers:数组类型,表示TypeHandler

  • 接下来就是在Spring的applicationContext文件中定义我们想要的Mapper对象对应的MapperFactoryBean了。通过MapperFactoryBean可以获取到我们想要的Mapper对象。MapperFactoryBean实现了Spring的FactoryBean接口,所以MapperFactoryBean是通过FactoryBean接口中定义的getObject方法来获取对应的Mapper对象的。在定义一个MapperFactoryBean的时候有两个属性需要我们注入,一个是Mybatis-Spring用来生成实现了SqlSession接口的SqlSessionTemplate对象的sqlSessionFactory;另一个就是我们所要返回的对应的Mapper接口了。

定义好相应Mapper接口对应的MapperFactoryBean之后,我们就可以把我们对应的Mapper接口注入到由Spring管理的bean对象中了,比如Service bean对象。这样当我们需要使用到相应的Mapper接口时,MapperFactoryBean会从它的getObject方法中获取对应的Mapper接口,而getObject内部还是通过我们注入的属性调用SqlSession接口的getMapper(Mapper接口)方法来返回对应的Mapper接口的。这样就通过把SqlSessionFactory和相应的Mapper接口交给Spring管理实现了Mybatis跟Spring的整合。

对应xml

MapperScannerConfigurer


利用上面的方法进行整合的时候,我们有一个Mapper就需要定义一个对应的MapperFactoryBean,当我们的Mapper比较少的时候,这样做也还可以,但是当我们的Mapper相当多时我们再这样定义一个个Mapper对应的MapperFactoryBean就显得速度比较慢了。为此Mybatis-Spring为我们提供了一个叫做MapperScannerConfigurer的类,通过这个类Mybatis-Spring会自动为我们注册Mapper对应的MapperFactoryBean对象。

如果我们需要使用MapperScannerConfigurer来帮我们自动扫描和注册Mapper接口的话我们需要在Spring的applicationContext配置文件中定义一个MapperScannerConfigurer对应的bean。对于MapperScannerConfigurer而言有一个属性是我们必须指定的,那就是basePackage。basePackage是用来指定Mapper接口文件所在的基包的,在这个基包或其所有子包下面的Mapper接口都将被搜索到。多个基包之间可以使用逗号或者分号进行分隔。最简单的MapperScannerConfigurer定义就是只指定一个basePackage属性,如:

Xml代码

  1. <bean class=“org.mybatis.spring.mapper.MapperScannerConfigurer”>

  2. <property name=“basePackage” value=“com.tiantian.mybatis.mapper” />

  3. bean>

这样MapperScannerConfigurer就会扫描指定基包下面的所有接口,并把它们注册为一个个MapperFactoryBean对象。

五、创建mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>

六、创建services接口

package com.szz.service;

import java.util.List;

import com.szz.bean.User;

public interface UserService {

public List getUsers();

/*

  • 濡傛灉ID涓虹┖灏辨壘username 濡傛灉username涓虹┖灏辨壘ID锛�閮藉~鎸夌収ID

*/

public User getUserInfo(String ID,String userName);

public int getCount();

// public int saveUser(User user);

public int insertUser(User user);

public int updateUser(User user);

public int deleteUser(String ID);

}

七‘services接口的实现类  serviceImpl

/**

*/

package com.szz.service.impl;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.szz.bean.User;

import com.szz.dao.UserDao;

import com.szz.service.UserService;

/**

  • @author Administrator

*/

@Service(“userService”)

public class UserServiceImpl implements UserService {

@Autowired

private UserDao userDao;

/*

@Autowired

private SqlSessionTemplate sessionTemplate;*/

public UserDao getUserDao() {

return userDao;

}

/**

  • @param userDao the userDao to set

*/

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

@Override

public List getUsers() {

// TODO Auto-generated method stub

return userDao.selectAll();

//return sessionTemplate.getMapper(UserDao.class).selectAll();

}

@Override

public User getUserInfo(String ID, String userName) {

// TODO Auto-generated method stub

if(ID!=null){

return userDao.findById(ID);

}

else

return userDao.findByUserName(userName);

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return userDao.countAll();

}

@Override

public int insertUser(User user) {

// TODO Auto-generated method stub

return userDao.insert(user);

}

@Override

public int updateUser(User user) {

// TODO Auto-generated method stub

return userDao.update(user);

}

@Override

public int deleteUser(String ID) {

// TODO Auto-generated method stub

return userDao.delete(ID);

}

}

八、创建控制类controller包/**

/**

*/

package com.szz.action;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.servlet.ModelAndView;

import com.szz.base.acion.BaseAction;

import com.szz.bean.User;

import com.szz.service.UserService;

/**

  • @author Administrator

*/

@Controller

@RequestMapping(value=“/user”)

public class UserAction extends BaseAction {

@Autowired

private UserService userService;

@RequestMapping(value=“/login”,method=RequestMethod.POST)

public String login(){

return “redirect:/user/userList”;

}

@RequestMapping(value=“userList”)

public ModelAndView showAll(){

System.out.println(“index…”);

ModelAndView MV = new ModelAndView(“user/index”);

List userList = new ArrayList();

userList = userService.getUsers();

MV.addObject(“userList”,userList);

return MV;

}

@RequestMapping(value=“/add”)

public ModelAndView login(HttpServletRequest request,@RequestParam(value=“username”, required=true, defaultValue=“szz”) String name){

System.out.println(“/user/login…”);

ModelAndView mv = new ModelAndView(“user/success”);

mv.addObject(“add”, “娣诲姞”);

return mv;

}

@RequestMapping(value=“/edituser”)

public ModelAndView edit(@RequestParam(value=“ID”) String ID){

ModelAndView mv = new ModelAndView(“user/edit”);

User user = userService.getUserInfo(ID, null);

mv.addObject(“user”,user);

return mv;

}

@RequestMapping(value=“/deleteuser”)

public String deleteuser(@RequestParam(value=“ID”) String ID){

userService.deleteUser(ID);

return “redirect:/user/userList”;

}

@RequestMapping(value=“/userset”,method=RequestMethod.POST)

public String user(@ModelAttribute(“user”)User user ) {

System.out.println(user.getNAME());

读者福利

分享一份自己整理好的Java面试手册,还有一些面试题pdf

不要停下自己学习的脚步

字节跳动的面试分享,为了拿下这个offer鬼知道我经历了什么

字节跳动的面试分享,为了拿下这个offer鬼知道我经历了什么

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
ired=true, defaultValue=“szz”) String name){

System.out.println(“/user/login…”);

ModelAndView mv = new ModelAndView(“user/success”);

mv.addObject(“add”, “娣诲姞”);

return mv;

}

@RequestMapping(value=“/edituser”)

public ModelAndView edit(@RequestParam(value=“ID”) String ID){

ModelAndView mv = new ModelAndView(“user/edit”);

User user = userService.getUserInfo(ID, null);

mv.addObject(“user”,user);

return mv;

}

@RequestMapping(value=“/deleteuser”)

public String deleteuser(@RequestParam(value=“ID”) String ID){

userService.deleteUser(ID);

return “redirect:/user/userList”;

}

@RequestMapping(value=“/userset”,method=RequestMethod.POST)

public String user(@ModelAttribute(“user”)User user ) {

System.out.println(user.getNAME());

读者福利

分享一份自己整理好的Java面试手册,还有一些面试题pdf

不要停下自己学习的脚步

[外链图片转存中…(img-mzkMhKzu-1714762203117)]

[外链图片转存中…(img-wX8dJzZa-1714762203118)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值