ssm框架的小总结
一、mybatis框架
mybatis框架主要就是完成持久层的实现,简化了持久层的开发,
1.首先是配置文件的编写,我们这里就命名为mybatis-config.xml,先配置文件头,然后加载连接数据库的配置propersties文件,为实体类取别名省的后续在返回值的时候仍使用包名.类名的方式,下边可以设置映射级别,然后再配置数据库的连接,下边的mappers的标签中配置每一个dao接口的对应的mapper文件(注意这里使用有三种方式 class、resource)package标签的name的属性配置指定文件包下的映射文件,
<?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>
<properties resource="dev-db.properties"></properties>
<!--配置别名-->
<typeAliases>
<package name="com.song.pojo"/>
</typeAliases> <!--配置数据库环境-->
<environments default="devlopment">
<environment id="devlopment">
<transactionManager type="jdbc"></transactionManager>
<!--连接池-->
<dataSource type="pooled">
<property name="username" value="${username}"/>
<property name="password" value="${pwd}"/>
<property name="url" value="${url}"/>
<property name="driver" value="${driver}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/song/dao/Igrade.xml"></mapper>
</mappers>
</configuration>
2.映射文件,这里一般命名为***mapper.xml文件,再idea的位置是resource文件目录下,创建于dao接口同名同级的文件目录,然后导入文件头(文件约束),mapper标签中的namespace属性填写上其对应dao接口的路径,下边写每一个查询语句,select 返回数据类型可以是全限定的实体类名,也可以是前边配置的别名,这里如果是数据库的列名和实体类的字段名一致,mybatis就可以为你进行自动的映射,如果有 一对一,一对多,多对多的映射关系,就需要手动的去指定其对应关系,resultmap标签,collection一对多 association标签 多对多关系映射 ,传入的参数的属性可以不写,但是返回的值的类型就必须要写上,dml语句的返回就是int类型,所以他没有返回值的属性,这里要说下复杂的动态的SQL语句,需要用到where标签,if标签,拼接字符串用concat(‘%‘,#{id},'%')foreach遍历等
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="com.wgg.dao.AdminDao">
<!--查询所有的用户 -->
<select id="getAllAdmin" resultType="com.wgg.pojo.Admin">
select * from admin
</select> <!--根据名字来查 我们在写查询语句的时候 ?表示占位符 在mybatis中 就用#{}来表示占位 而且名字最好和传入的参数一致 .给返回值类型在配置文件中起别名
以简化这个字符串的书写 -->
<select id="getAdminByName" resultType="Admin">
select * from admin where
username=#{name}
</select> <!-- 根据id和名字来查 此时的参数 有两个 可以将parameterType 定义写成对象的类型 他会自动映射 传入的username=#{username}要和
表中的字段一致 -->
<select id="getAdminByAdmin" resultType="Admin"
parameterType="Admin">
select * from admin where username=#{username} and
id=#{id}
</select> <!-- 分开传入两个字符串的参数来查询 -->
<select id="getAdminByNameAndId" resultType="Admin">
select * from admin
where username=#{username} and id=#{id}
</select> <!-- 模糊查询 -->
<select id="getAdminWithPnameLike" resultType="Admin">
select * from
admin where username like CONCAT('%',#{pname},'%')
</select> <!-- 传入一个数组作为参数 用来子查询 -->
<select id="getAdminWithArray" resultType="Admin">
select * from admin where id in
<foreach collection="array" open="(" separator="," close=")"
item="idarr">
#{idarr}
</foreach>
</select> <!-- 传入一个集合来遍历集合查询 -->
<select id="getAdminWithIdList" resultType="Admin">
select * from admin where id in
<foreach collection="list" open="(" separator="," close=")" item="idList">
#{idList}
</foreach>
</select>
<!-- map集合 -->
<select id="getAdminWithMap" resultType="Admin">
select * from admin where username=#{username} and password=#{password}
</select> <!-- 增删改 --> <!-- 增加对象信息 传入一个对象-->
<insert id="addAdmin">
insert into admin (username,password)values(#{username},#{password})
</insert> <!-- 删除 对象信息 传入一个id-->
<delete id="delAdminById">
delete from admin where id=#{id}
</delete> <!--修改用户的信息 传入一个string -->
<update id="UpdateAdmin">
update admin set username =#{username} where id=#{id}
</update> <!-- 多条件查询 动态sql 相当于 多条件的模糊查询-->
<select id="getAllAdminInfoByFazzy" resultType="Admin">
select * from admin
<!-- 你可以使用where标签来解决这个问题,where 元素只会在至少有一个子元素的条件返回 SQL
子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。 -->
<trim prefix="where" prefixOverrides="and | or">
<if test="username!=null"> and username=#{username}</if>
<if test="password!=null">and password=#{password}</if>
</trim>
</select> <!-- Switch -->
<select id="getAllAdminInfoBySwitch">
select * from admin
<choose>
<!-- 进入一个when其他的when 就不再进入了 -->
<when test="username!=null">and username=#{username}</when>
<when test="password!=null">and password=#{password}</when>
<!-- 查询所有 -->
<otherwise></otherwise>
</choose>
</select> </mapper>
3.关于dao的接口,因为mybatis框架,所以我们不用再写复杂的实现类,只需要编写接口就行了,再向mapper文件传参数的时候,如果只有一个参数就和占位符中的名称相同就可以了,多个参数的话,就需要用到对象,集合或者map来传输数据,数组,此时需要遍历取值的就要使用 如:foreach collection="array" 这样的指定容器的类型,然后遍历。如果多个不同的参数可以使用map来指定,只要将他的键指定成占位符中的名称一致就行了,如果传入不同的参数也可以,再dao的接口传参的地方用@parma()注解指定每一个参数,但这样太麻烦,还是用map集合吧,
// 根据id和name来查询对象
public Admin getAdminByNameAndId(@Param("username") String name, @Param("id") int id); // 模糊查询
public Admin getAdminWithPnameLike(String pname); // 传入数组作为参数来查询
public List<Admin> getAdminWithArray(int[] idarr); // 传入集合作为参数来查询
public List<Admin> getAdminWithIdList(List<Integer> idList); //
public Admin getAdminWithMap(Map<String, String> idmap); public int addAdmin(Admin admin); public int delAdminById(int id); //修改用户
public int UpdateAdmin(@Param("username")String username, @Param("id")Integer id);
//模糊多条件查询
public List<Admin> getAllAdminInfoByFazzy(@Param("username")String username,@Param("password")Integer password); //Switch
public List<Admin> getAllAdminInfoBySwitch(@Param("username")String username,@Param("password")Integer password);
4.导入依赖,mybatis用到的jar包不多
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.</version>
</dependency> <!-- 数据库依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.</version>
</dependency>
这基本是就是mybatis的框架的基本书写流程了
ssm框架的小总结的更多相关文章
- SSM框架CRUD小案例
1.数据库准备 部门tbl_dept 员工tbl_emp 建立员工和部门的外键 2.在IDEA创建SSM项目环境 2.1配置Web模块 最上面的图是错误示范,注意!!! 在Tomcat配置了项目路径, ...
- (SSM框架)实现小程序图片上传(配小程序源码)
阅读本文约"2分钟" 又是一个开源小组件啦! 因为刚好做到这个小功能,所以就整理了一下,针对微信小程序的图片(文件)上传! 原业务是针对用户反馈的图片上传.(没错,本次还提供小程序 ...
- ssm框架与shiro的整合小demo,用idea开发+maven管理
shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...
- 小菜鸟之SSM框架
# SSM框架 # **什么是框架** 就是模板,将一些基础性的程序和代码由框架模板提供,然后程序员补充和业务需求相关的代码. # **ssm框架组成** s: springMvc 子框架 代替ser ...
- SSM框架——以注解形式实现事务管理
上一篇博文<SSM三大框架整合详细教程>详细说了如何整合Spring.SpringMVC和MyBatis这三大框架.但是没有说到如何配置mybatis的事务管理,在编写业务的过程中,会需要 ...
- 百度富文本编辑器ueditor在jsp中的使用(ssm框架中的应用)
折腾了一下午终于把百度富文本编辑器ueditor搞定了! 项目地址:https://github.com/724888/lightnote_new 首先我参考了一个ueditor的demo ...
- 整合最优雅SSM框架:SpringMVC + Spring + MyBatis
我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配 ...
- 最优雅SSM框架:SpringMVC + Spring + MyBatis
在写代码之前我们先了解一下这三个框架分别是干什么的? 相信大以前也看过不少这些概念,我这就用大白话来讲,如果之前有了解过可以跳过这一大段,直接看代码! SpringMVC:它用于web层,相当于con ...
- 手把手教你 基础 整合最优雅SSM框架:SpringMVC + Spring
我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配 ...
随机推荐
- 记录一些mysql常用命令
启动mysql (ubuntu系统, 以下都是Ubuntu上操作的命令) 这些命令都是可以在任何目录下执行的. # [sudo] 表示可加可不加sudo [sudo] /etc/init.d/mys ...
- QueryList之flatten方法
正确用法: $data = $ql->get($url)->query()->getData();$data = $data->flatten()->all(); 注意: ...
- JPA规则
- 51 Nod 1572 宝岛地图
1572 宝岛地图 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 勇敢的水手们到达了一个小岛,在这个小岛上,曾 ...
- 微信小程序地图总结
小程序官方的 map地图说明文档已经非常详细了,但是鉴于如果没有一个合适的使用场景,对于刚接触 map 的初级开发,看着这些繁杂又贼多的属性名和字段,外加急切的开发需求,晕头转向是不可避免的了.接下来 ...
- [Vue] : 键盘修饰符
键盘修饰符以及自定义键盘修饰符 为文本框回车键绑定事件 <input type="text" class="form-control" v-model=& ...
- sscanf简介
#include<cstdio> #include<cstring> using namespace std; int main() { ]; //用法一:取指定长度的字符串 ...
- [NLP] cs224n-2019 Assignment 1 Exploring Word Vectors
CS224N Assignment 1: Exploring Word Vectors (25 Points)¶ Welcome to CS224n! Before you start, make ...
- LK光流算法公式详解
由于工程需要用到 Lucas-Kanade 光流,在此进行一下简单整理(后续还会陆续整理关于KCF,PCA,SVM,最小二乘.岭回归.核函数.dpm等等): 光流,简单说也就是画面移动过程中,图像上每 ...
- oracle获取当前月的第一个星期五
-to_char(trunc(sysdate,'month'),'D') end || '号是当月的第一个星期五' from dual;