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代码
-
<bean class=“org.mybatis.spring.mapper.MapperScannerConfigurer”>
-
<property name=“basePackage” value=“com.tiantian.mybatis.mapper” />
-
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());
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
面试资料整理汇总
这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。
面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了
在这里祝大家能够拿到心仪的offer!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-YuexiVei-1713420709752)]
[外链图片转存中…(img-rHgwg8rj-1713420709752)]
[外链图片转存中…(img-9cJnEhWy-1713420709753)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
面试资料整理汇总
[外链图片转存中…(img-m601xZwu-1713420709753)]
[外链图片转存中…(img-Kh1WnmMV-1713420709753)]
这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。
面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了
在这里祝大家能够拿到心仪的offer!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!