1.Mybatis

  a.定义:MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架

  b.步骤:

    ①在src下创建 SqlMapConfig.xml 及 datasource.properties

    ②建UserMapper.java(相当于DAO)

public interface UserMapper {public int addUser(@Param("user")User user);public int delUserById(int userId);public int updateUser(@Param("user")User user);public User findUserById(int userId);public List<User> findAllUser();}

    ③建UserMapper.xml

<?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.wode.mapper.UserMapper"><resultMap id="userMap" type="User"><id property="userId" column="user_id" /><result property="userName" column="user_name"/><result property="userPwd" column="user_pwd"/><result property="userType" column="user_type"/></resultMap><insert id="addUser"  parameterType="User">insert into users (user_id,user_name,user_pwd,user_type) values (null,#{user.userName},#{user.userPwd},#{user.userType})</insert><delete id="delUserById" parameterType="int">delete from users where user_id=#{userId}</delete><update id="updateUser" parameterType="User">update users set user_name = #{user.userName},user_pwd = #{user.userPwd},user_type = #{user.userType} where user_id = #{user.userId}</update><select id="findUserById" parameterType="int" resultMap="userMap">select * from users where user_id = #{user.userId}</select><select id="findAllUser" resultMap="userMap">select * from users</select></mapper>

    ④在Service中个使用

//一下代码可封装于另一个类中
InputStream  in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = sessionFactory.openSession()//使用
UserMapper mapper=session.getMapper(UserMapper.class);//增
int result=mapper.addUser(user);
session.commit();//删
int result=mapper.delUserById(id);
session.commit();//改
int result=mapper.updateUser(user);
session.commit();//查单个对象
User user = mapper.findUserById(userId);//查所有对象
List<User> users = mapper.findAllUser()

2.其他查询

  a.查询聚合函数

    UserMapper.xml中

     <select id="findCountUser" resultType="int">select count(*) from users</select>

    UserMapper.java中

public int findCountUser();

  b.模糊查询

    防止sql注入:

     <select id="findUserLikeName" parameterType="java.lang.String" resultMap="userMap">select * from users where user_name like concat('%',#{name},'%')</select>

    不防止sql注入:

     <select id="findUserLikeName" parameterType="java.lang.String" resultMap="userMap">select * from users where user_name like '%${name}%'</select>

public List<User> findUserLikeName(@Param("name")String name);

  c.查询单个字段

     <select id="findPwdByName" parameterType="java.lang.String" resultType="java.lang.String">select user_pwd from users where user_name = #{userName}</select>

    public String findPwdByName(@Param("userName")String userName);

3.一对一(One2One)

  a.方法一:

    UserMapper.xml中

    <resultMap id="userAndInfoMap" type="User"><id property="userId" column="user_id" /><result property="userName" column="user_name"/><result property="userPwd" column="user_pwd"/><result property="userType" column="user_type"/><association property="info" resultMap="com.wode.mapper.InfoMapper.InfoMapper"></association></resultMap><select id="findUserAndInfoById" parameterType="int" resultMap="userAndInfoMap">select * from users u left join infos i on u.user_id=i.user_id where u.user_id = #{userId}</select>

  b.方法二

    UserMapper.xml中

    <resultMap id="userAndInfoMap2" type="User"><id property="userId" column="user_id" /><result property="userName" column="user_name"/><result property="userPwd" column="user_pwd"/><result property="userType" column="user_type"/><association property="info" column="user_id" javaType="Info" select="com.wode.mapper.InfoMapper.findInfoByUserId"></association></resultMap><select id="findUserAndInfoById2" parameterType="int" resultMap="userAndInfoMap2">select * from users u where u.user_id = #{userId}</select>

    InfoMapper.xml中

    <resultMap type="Info" id="InfoMapper"><id property="infoId" javaType="int" column="info_id" /><result javaType="java.lang.String" property="infoName" column="info_name" /><result javaType="java.lang.String" property="infoEmail" column="info_email" /></resultMap><select id="findInfoByUserId" resultMap="InfoMapper">select * from infos where user_id=#{userId}</select>

4.一对多(One2Many)

  同One2One,仅在List<Info>部分将<association ...></association > 更换为<collection ...></collection>

5.多对多(Many2Many)

  a.方法一:同上

    <resultMap id="UserAndCourseMapper2" type="User"><id property="userId" column="user_id" /><result property="userName" column="user_name"/><result property="userPwd" column="user_pwd"/><result property="userType" column="user_type"/><collection property="courses" resultMap="com.wode.mapper.CourseMapper.courseMap"></collection></resultMap><select id="findUserAndCourseById2" parameterType="Integer"resultMap="UserAndCourseMapper2">select * from users u,course c,user_course uc where u.user_id=uc.user_id and c.courseId = uc.course_id and u.user_id=#{userId}</select>

  b.方法二:在通过userId查Course时需用到子查询(即第二个select)

    <resultMap id="UserAndCourseMapper" type="User"><id property="userId" column="user_id" /><result property="userName" column="user_name"/><result property="userPwd" column="user_pwd"/><result property="userType" column="user_type"/><collection property="courses" column="user_id" select="findCourseByUser"></collection></resultMap><select id="findUserAndCourseById" parameterType="Integer"resultMap="UserAndCourseMapper">select * from users where user_id=#{userId}</select><select id="findCourseByUser" parameterType="Integer"resultMap="com.wode.mapper.CourseMapper.courseMap">select * from course where courseId in(select course_id from user_course where user_id=#{userId})</select>

6.二级缓存

  a.在SqlMapConfig.xml配置

<settings><setting name="cacheEnabled" value="true" />
</settings>

  b.在UserMapper.xml中配置

<cache />

7.动态查询

  a.if

    <select id="searchStudent" parameterType="java.util.Map"  resultMap="scoreMap">select * from score  where 1=1<if test="java!=null">and java &gt;=#{java}</if><if test="web!=null">and web &gt;=#{web}</if><if test="mysql!=null">and mysql &gt;=#{mysql}</if></select>

  b.choose

    <select id="searchStudent2" parameterType="java.lang.String" resultMap="scoreMap">select * from score <choose> <when test="course=='java'">where java &gt;=60</when><when test="course=='web'">where web &gt;=60</when><otherwise>where mysql &gt;=60</otherwise></choose></select>

  c.<where>

    <select id="searchStudent" parameterType="java.util.Map"  resultMap="scoreMap">select * from score <where><if test="java!=null">and java &gt;=#{java}</if><if test="web!=null">and web &gt;=#{web}</if><if test="mysql!=null">and mysql &gt;=#{mysql}</if></where></select>

  d.trim

    <select id="searchStudent" parameterType="java.util.Map"  resultMap="scoreMap">select * from score   <trim prefix="where" prefixOverrides="and|or"><if test="java!=null">and java &gt;=#{java}</if><if test="web!=null">and web &gt;=#{web}</if><if test="mysql!=null">and mysql &gt;=#{mysql}</if></trim></select>

  e.set

    <update id="updateScore" parameterType="java.util.Map">update score <set><if test="java != null">java = #{java},</if><if test="web != null">web = #{web},</if><if test="mysql != null">mysql = #{mysql}</if></set>where id = #{id}</update>

  f.foreach

    <select id="findUser"  parameterType="java.util.Map" resultMap="userMap">select * from users<where>user_id in<foreach collection="usersId" item="userId" separator="," open="(" close=")" index="">#{userId}            </foreach></where></select>

8.注解

  a.SqlMapConfig.xml中<mappers>只需配置

    <mappers><package name="com/wode/mapper" /></mappers>

  b.普通注解

    //使用注解的方式新增用户@Insert("insert into users values(null,#{user.userName},#{user.userPwd},#{user.userType})")@Options(keyProperty="user.userId",useGeneratedKeys=true)public int addUser(@Param("user")User user);//注解的方式修改用户资料@Update("update users set user_name=#{name} where user_id=#{id}")public int updateUserNameById(@Param("name")String name,@Param("id")int id);//注解的方式删除用户@Delete("delete from users where user_id=#{id}")public int delById(@Param("id") int id);@Select("select * from users")
/**    @Results({@Result(id=true,property="userId",column="user_id",javaType=Integer.class),@Result(property="userName",column="user_name",javaType=String.class),@Result(property="userPwd",column="user_pwd",javaType=String.class),@Result(property="userType",column="user_type",javaType=Integer.class)})*/@ResultMap("userMap")public List<User> findAllUser();

  c.一对多、多对一查询

    @Select("select * from users where user_id=#{id}")@Results({@Result(id=true,property="userId",column="user_id",javaType=Integer.class),@Result(property="userName",column="user_name",javaType=String.class),@Result(property="userPwd",column="user_pwd",javaType=String.class),@Result(property="userType",column="user_type",javaType=Integer.class),@Result(property="info",column="user_id",many=@Many(select="com.wode.mapper.UserInfoMapper.findByUser")) })@Select("select * from userInfo where info_id=#{infoId}")@Results({@Result(id=true,column="info_id",property="infoId",javaType=Integer.class),@Result(column="nickName",javaType=String.class,property="nickName"),@Result(column="email",property="email",javaType=String.class),@Result(column="user_id",property="user",one=@One(select="com.wode.mapper.UserMapper.findUserById"))})public UserInfo findInfoAndUser(@Param("infoId")int infoId);

9.其他

  a.添加后返回主键

    <insert id="..." parameterType="..."><selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">SELECT LAST_INSERT_ID()</selectKey>insert into ... (...) values (...)</insert>

  b.有则修改,无则添加

    <insert id="addUserNum">insert into user_record (user_id, user_num) values (#{userId}, 1) ON DUPLICATE key UPDATE user_num = user_num+1</insert>

转载于:https://www.cnblogs.com/vettel0329/p/6735331.html

JavaEE 之 Mybatis相关推荐

  1. JavaEE高级-MyBatis学习笔记

    一.MyBatis简介 - MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. - MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. - My ...

  2. 2023最新java学习教程(学习路线+课程大纲+视频教程+面试题+学习工具)

    2023最新java学习教程汇总(学习路线+课程大纲+视频教程+面试题+学习工具) 目录 一.首先要了解什么是JAVA? 二.Java发展及就业前景分析 三.Java学习路线图 四.Java课程大纲 ...

  3. 好程序员:Java书籍推荐,程序员必看的5本Java书籍,赶紧收藏!

    今天好程序员给大家推荐5本Java书籍,各大高校都在使用(具体名单如下),所有学习Java的程序员都不应该错过! 第一本Java书籍<Java EE(SSM框架)企业应用实战> 本书全面介 ...

  4. JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统(附源码)

    文章目录 JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统 一.系统介绍 二.开发步骤 三.系统展示 四.开发总结 五.数据库相关 ...

  5. ssm毕设项目基于JAVAEE的车检预约系统846ks(java+VUE+Mybatis+Maven+Mysql+sprnig)

    ssm毕设项目基于JAVAEE的车检预约系统846ks(java+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mys ...

  6. 《JavaEE框架整合开发入门到实战——Spring+SpringMVC+MyBatis》读书笔记

    加油生活,嗯,希望假期可以把这本书刷完,新年快乐,嘻嘻,今天是旧的一年里最后的一天,嗯,除夕一过,就25岁啦.希望新的一年里,学更多的东西,认识优秀的人,希望家人健康平安,希望自己少一些烦恼,总之先学 ...

  7. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(1):Mybatis和Hibernate概念理解...

    一.关键字说明: oop:面向对象 aop:面向切面 ioc:控制反转 orm:对象关系映射 pojo:数据库表映射的java实体类 二.常识说明: 1.hibernate和mybatis都属于持久层 ...

  8. 博为峰JavaEE技术文章 ——MyBatis 注解

    2019独角兽企业重金招聘Python工程师标准>>> 前面在介绍Mybatis时,我们都是使用mapper xml文件来配置SQL语句的.Mapper xml使用起来比较方便,但是 ...

  9. 博为峰JavaEE技术文章 ——MyBatis 简介(2)

    2019独角兽企业重金招聘Python工程师标准>>> 了解了Mybatis的历史以及基本的三层架构之后,小博老师继续给大家介绍Mybatis的数据处理流程. 1. MyBatis的 ...

最新文章

  1. Cognitive Inference:认知推理下的常识知识库资源、常识推理测试评估与中文实践项目索引...
  2. 机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
  3. 确认了!西湖大学将开始招收本科生:首批五个专业
  4. 电路知识--认识原理图(二)
  5. 利用win7的applocker功能来有组织的阻止相关软件运行
  6. vertex 3.0 与SpringBoot混合开发之初探
  7. 4-1 面向对象概述
  8. python执行效果_python:执行一个命令行N次
  9. linux后台执行shell脚本
  10. dubbo学习 二 dubbo源码大致查阅
  11. exchange2010安装
  12. 常用编码说明-GB2312
  13. 技巧8——linux假死现象要知道
  14. 项目中git的运用及命令明细
  15. Python可视化:Pyecharts成长之路
  16. 百度云生态分享日| 网络技术及应用主题沙龙圆满落幕
  17. MybatisPlus 分页排序封装
  18. 几款浏览器兼容性测试工具
  19. 罗振宇向左,吴晓波向右
  20. antV/L7@2.2.19-」世界地图+散点图

热门文章

  1. Python 计算一年有多少秒
  2. 【深度学习】模型部署的错误整理
  3. ODBC学习笔记—SQLSetStmtAttr
  4. 如何合并视频?教你把多个视频合并成一个视频
  5. 《你拥有的最宝贵的财富是什么》作业
  6. 一个ACM底层参赛选手的退役感言
  7. 阿里云域名备案和域名解析流程详解
  8. P41 引用类型用法总结
  9. 统计学之三大相关性系数(pearson、spearman、kendall)matlab实现
  10. KWP2000协议学习笔记(一)