SSM简介
SSM框架
Spring:
IOC(控制反转)和AOP(面向切面)
SpringMVC:
model:模型;view:视图;controller:控制
MyBatis:
只需要配置就可以连接数据库进行操作。(不需要jdbc的七个步骤)
代码框架
util 工具层;
bean 实体类,对应数据库中的表格,,包含属性、构造方法、getter和setter、toString;
dao 持久层,负责数据库的增删查改;
service 业务层,负责数据处理的服务
controller 控制层,负责实现和容器、服务的交互。
项目实例1
- 新建maven项目:
记得勾选Create from archetype
点击next后,我们需要修改maven的安装目录,并按下图所示添加maven属性。
注意在创建后需要在右下角点击Enable Auto-Import,这样才能自动导入我们需要的jar包,不会出现错误。
- 框架搭建
新建src、main、java目录,右键java文件夹mark directory as sources root,我们将在这个目录下搭建实体类、持久层、控制层和服务层。
在main目录下新建resource目录,右键将resource目录Mark Directory As Resource Root,如下图所示:
搭建好的框架如下所示,其中bean为实体类层,对应数据库中的表格,包含属性、构造方法、getter和setter、toString;controller为控制层,负责实现和容器、服务的交互;dao为持久层,负责数据库的增删查改;service为业务层,负责数据处理的服务。
- 修改maven项目配置文件
pom.xml为meaven项目的配置文件,修改pom.xml文件,将老师提供的素材中的pom.xml里面的properties和dependencies置换到项目中的pom.xml文件。复制过去后,IDEA会自动下载相应依赖包,当下载完毕后,将不再有红色报错提示。按住control可以单击查看依赖包。如下所示
4.实体类实现
按照昨天的方法在bean层书写实体类UserInfo,
public class UserInfo {
private int id;
private String username;
private String password;
public UserInfo() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserInfo{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
5.持久层设置
在dao层写一个接口文件IUserInfoDao,具体的实现将在myBatis文件中指定。
public interface IUserInfoDao {
public List<UserInfo> findAll();
public void updateUser(UserInfo userInfo);
public void deleteUser(int id);
public void addUser(UserInfo userInfo);
public UserInfo searchUser(int id);
}
- myBatis文件配置与实现
为了使用myBatis,我们需要下载素材包中的以下三个文件复制到resources的mapper目录下,如下所示:
修改applicationContext.xml和db.properties文件。在db.properties文件中我们需要指定数据库的url、用户名和密码。
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/user?useSSL=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123
在applicationContext.xml文件中我们需要指定Dao包、bean包、映射文件的地址,一般是自动检测生成的,需要自己检查是否与自己的项目对应,具体代码如下所示:
<!-- 3.配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 扫描bean包 使用别名 -->
<property name="typeAliasesPackage" value="com.zhongruan.bean"></property>
<!--配置加载映射文件 UserMapper.xml-->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- 自动生成dao,mapper-->
<!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="com.zhongruan.dao"/>
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
接下来书写映射函数文件,也就是myBatis的实现,在mapper目录下新建UserInfoMapper.xml文件,将素材中的UserMapper.xml文件代码复制过去,然后根据个人需要书写具体的SQL语句。
<?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.zhongruan.dao.IUserInfoDao" >
<select id="findAll" resultType="com.zhongruan.bean.UserInfo">
select * from userinfo
</select>
<select id="searchUser" resultType="com.zhongruan.bean.UserInfo" parameterType="int">
select * from userinfo where id =#{id}
</select>
<insert id="addUser" parameterType="com.zhongruan.bean.UserInfo">
insert into userinfo (id, username, password) values (#{id}, #{username}, #{password})
</insert>
<update id="updateUser" parameterType="com.zhongruan.bean.UserInfo">
update userinfo set
username = #{username},
password = #{password}
where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from userinfo where id = #{id}
</delete>
</mapper>
- 服务层实现
进行service接口的创建和实现,service服务层就相当于后端向前端提供的服务,所以要在其中书写增删查改几个功能函数
在impl包下书写具体的实现类,调用Spring注入的userInfoDao,实现具体的功能。@Autowired注释可以实现自动装配。
@Service("userInfoService")
public class UserInfoServiceImpl implements IUserInfoService {
@Autowired
IUserInfoDao userInfoDao;
@Override
public List<UserInfo> findAll() {
return userInfoDao.findAll();
}
@Override
public void addUser(UserInfo userInfo) {
// System.out.println(userInfo);
userInfoDao.addUser(userInfo);
}
@Override
public void deleteUser(int id) {
userInfoDao.deleteUser(id);
}
@Override
public void updateUser(UserInfo userInfo) {
userInfoDao.updateUser(userInfo);
}
@Override
public UserInfo searchUser(int id) {
return userInfoDao.searchUser(id);
}
}
8.界面素材的复制
复制素材中的web.xml到main-> webapp -> WEB-INF目录下,复制jsp文件夹到main -> webapp目录下,复制spring-mvc.xml文件main -> resources目录下。
9.Tomcat部署
使用Tomcat进行部署,点击Run , Edit Configurations,点击“+”添加Tomcat服务器,如下所示:
如下图进行配置,在Server窗口需要配置Name,Application server和JRE
在deployment窗口,点击“+”号,选择Artifact,选择第二个ssm0712:war exploded进行添加部署
然后apply, ok即可
在浏览器中输入localhost:8080\ssm0712(项目名),即可看到
10.控制层实现
接下来书写控制层,完成前后端的交互处理,或者说视图与模型的交互。在Controller下新建一个UserInfoController类,创建一个IUserInfoService对象,来获取服务层所提供的服务,注意使用@Autowired注释实现自动装配。依据jsp文件夹下的视图文件,书写相应的函数,记得注释@RequestMapping("*.do"),实现从页面与控制器的交互。在函数内部可以进行数据处理和视图更换。
@Controller
@RequestMapping("user")
public class UserInfoController {
@Autowired
IUserInfoService userInfoService;
//跳转到所有用户界面
@RequestMapping("findAll.do")
public ModelAndView findAll(){
//获取数据
List<UserInfo> userInfos = userInfoService.findAll();
//设置属性
ModelAndView mv = new ModelAndView();
mv.addObject("userInfos", userInfos);
//选择视图
mv.setViewName("allUser");
return mv;
}
//跳转到更新数据界面
@RequestMapping("toUpdate.do")
public ModelAndView toUpdate(@RequestParam("id") int id){
//处理数据
UserInfo userInfo = userInfoService.searchUser(id);
//设置属性
ModelAndView mv = new ModelAndView();
mv.addObject("userInfo", userInfo);
//选择视图
mv.setViewName("updateUser");
return mv;
}
//跳转到添加用户界面
@RequestMapping("toAddUser.do")
public ModelAndView toAddUser(){
//设置属性
ModelAndView mv = new ModelAndView();
//选择视图
mv.setViewName("addUser");
return mv;
}
//删除用户
@RequestMapping("delete.do")
public ModelAndView delete(@RequestParam("id") int id){
//处理数据
userInfoService.deleteUser(id);
List<UserInfo> userInfos = userInfoService.findAll();
//设置属性
ModelAndView mv = new ModelAndView();
mv.addObject("userInfos", userInfos);
//选择视图
mv.setViewName("allUser");
return mv;
}
//保存新增的用户
@RequestMapping("save.do")
public ModelAndView save(@RequestParam("id") int id, @RequestParam("username") String username, @RequestParam("password") String password){
UserInfo userInfo = new UserInfo();
userInfo.setId(id);
userInfo.setUsername(username);
userInfo.setPassword(password);
// 处理数据
userInfoService.addUser(userInfo);
List<UserInfo> userInfos = userInfoService.findAll();
// 设置属性
ModelAndView mv = new ModelAndView();
mv.addObject("userInfos", userInfos);
//选择视图
mv.setViewName("allUser");
return mv;
}
//保存更改的用户数据
@RequestMapping("update.do")
public ModelAndView update(@RequestParam("id") int id, @RequestParam("username") String username, @RequestParam("password") String password){
UserInfo userInfo = new UserInfo();
userInfo.setId(id);
userInfo.setUsername(username);
userInfo.setPassword(password);
//处理数据
userInfoService.updateUser(userInfo);
List<UserInfo> userInfos = userInfoService.findAll();
// 设置属性
ModelAndView mv = new ModelAndView();
mv.addObject("userInfos", userInfos);
//选择视图
mv.setViewName("allUser");
return mv;
}
}
效果截图