一、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框架的小总结的更多相关文章

  1. SSM框架CRUD小案例

    1.数据库准备 部门tbl_dept 员工tbl_emp 建立员工和部门的外键 2.在IDEA创建SSM项目环境 2.1配置Web模块 最上面的图是错误示范,注意!!! 在Tomcat配置了项目路径, ...

  2. (SSM框架)实现小程序图片上传(配小程序源码)

    阅读本文约"2分钟" 又是一个开源小组件啦! 因为刚好做到这个小功能,所以就整理了一下,针对微信小程序的图片(文件)上传! 原业务是针对用户反馈的图片上传.(没错,本次还提供小程序 ...

  3. ssm框架与shiro的整合小demo,用idea开发+maven管理

    shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...

  4. 小菜鸟之SSM框架

    # SSM框架 # **什么是框架** 就是模板,将一些基础性的程序和代码由框架模板提供,然后程序员补充和业务需求相关的代码. # **ssm框架组成** s: springMvc 子框架 代替ser ...

  5. SSM框架——以注解形式实现事务管理

    上一篇博文<SSM三大框架整合详细教程>详细说了如何整合Spring.SpringMVC和MyBatis这三大框架.但是没有说到如何配置mybatis的事务管理,在编写业务的过程中,会需要 ...

  6. 百度富文本编辑器ueditor在jsp中的使用(ssm框架中的应用)

    折腾了一下午终于把百度富文本编辑器ueditor搞定了!   项目地址:https://github.com/724888/lightnote_new     首先我参考了一个ueditor的demo ...

  7. 整合最优雅SSM框架:SpringMVC + Spring + MyBatis

    我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配 ...

  8. 最优雅SSM框架:SpringMVC + Spring + MyBatis

    在写代码之前我们先了解一下这三个框架分别是干什么的? 相信大以前也看过不少这些概念,我这就用大白话来讲,如果之前有了解过可以跳过这一大段,直接看代码! SpringMVC:它用于web层,相当于con ...

  9. 手把手教你 基础 整合最优雅SSM框架:SpringMVC + Spring

    我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配 ...

随机推荐

  1. JavaScript程序设计——FOR循环

    FOR循环流程图: 1.编写求6!的阶乘的代码 2.编写10个10相加的和 3.编写1+2+3+...+10连续相加的和 4.编写1+(1+2)+(1+2+3)+...+(1+2+3+...+10)连 ...

  2. linux manual free memory

    /proc/sys/vm/drop_caches (since Linux 2.6.16)Writing to this file causes the kernel to drop clean ca ...

  3. 2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)

    2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic 题意:有一张图,第i个点被占领需要ai个兵,而每个兵传送至该 ...

  4. [笔记]C++拷贝构造和移动构造

    一.拷贝构造 如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都没有默认值,则此构造函数是拷贝构造函数.(<C++Primer,第五版>) class Foo { publi ...

  5. Maven项目导出jar包,包含依赖

    1. Maven项目导出jar包,包含依赖:mvn dependency:copy-dependencies package 2. 可以在Project创建lib文件夹,输入以下命令:mvn depe ...

  6. yolo image.c

    void draw_detections(image im, detection *dets, int num, float thresh, char **names, image **alphabe ...

  7. Ubuntu 安装 JDK1.8

    以下是Ubuntu 14.04安装JDK1.8.0_25与配置环境变量过程笔记. 1.源码包准备: 首先到官网下载jdk,http://www.oracle.com/technetwork/java/ ...

  8. data binding 优缺点

    文章: 1. [译文] 我不使用Android Data Binding的四个理由 https://www.jianshu.com/p/559adeaaeffd 2. 原文:https://blog. ...

  9. springboot内置分页技术

    1,在pom.xml中注入分页的配置 <dependency> <groupId>com.github.pagehelper</groupId> <artif ...

  10. http2.0多路复用

    http/1中的每个请求都会建立一个单独的连接,除了在每次建立连接过程中的三次握手之外,还存在TCP的慢启动导致的传输速度低.其实大部分的http请求传送的数据都很小,就导致每一次请求基本上都没有达到 ...