mybatis

三层架构: 界面层:和用户打交道,接收用户的请求参数,显示处理结果。 jsp,html,servlet。-------Controller包-----------------springmvc(servlet)
业务逻辑层:接收了界面层传递的数据,计算逻辑,调用数据库,获取数据。---------------Service包 --------------------spring
数据访问层:访问数据库,执行对数据的增删改查。 ------------------Dao包------------------------mybatis


1.mybatis项目创建。1.创建maven工程,选择quickstart。

2.<select>查询标签,<insert>插入标签。<delete>删除标签

<insert>插入数据使用占位符#{}。eg:insert into students value (#{id},#{name},#{email},#{age}),可以得到方法传递的值。

3.创建JavaBean以及接口。

3.配置sqlmapper.xml: 在接口的包下创建一个与接口名相同的xmlsql配置文件,namespace为接口全类名,标签对应id为接口的对应方法名,resultType为sql语句值返回类型。在标签下写sql语句。
查询语句的都需要设置resultType否则不能匹配对象。
namespace与id组成唯一的sql语句标识。想要用sql语句需要根据此查找。

4.配置resource下的mybatis主配置文件: 在main下创建一个resource文件,然后右键将该文件添加为resource room。
在该文件下创建一个xml文件,里面配置日志的输出。<settings> <setting name="logImpl" value="STDOUT_LOGGING"/></settings>
配置数据库环境。<environments default="mybatis">。default值为使用的配置的数据库环境environment id
<environment default="mybatis">,environment标签配置数据库信息,id设置为数据库名,
配置target资源映射 <mappers><mapper resource="Dao/StudentDao.xml"/></mappers> ,resource值为sql映射文件在target下的目录,以/分割,默认从target/classes下开始。

5.封装sqlsession。

public class MyBatisUtils {
private static SqlSessionFactory factory=null;

static {
String config="mybatismapper.xml";
try {
InputStream in = Resources.getResourceAsStream(config);
factory=new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}

}
//获取sqlsession
public static SqlSession getsqlsession(){
SqlSession sqlSession=null;
if(factory!=null){
sqlSession=factory.openSession();//非自动提交事务
}
return sqlSession;
}
}

6.测试。1.通过工具类得到sqlsession对象。SqlSession sqlSession= MyBatisUtils.getsqlsession()
2.通过 implements imp =sqlsession.getmapper(implements.class) 的接口反射得到对应的接口实现类对象。 mybatis暗箱操作。
3.通过该imp实现类对象调用接口对应的方法对数据库进行操作。

 

【重要】mybatis的动态代理。 1.dao接口与sqlmapper文件在同一个包下,且文件名相同。
2.sqlmapper文件的namespace为dao接口的全类名。
3.sqlmapper文件的id值是dao接口中的方法名
4.dao接口不要使用重载方法,不要使用同名的不同参数的方法。
5.创建sqlsession工具类。得到sqlsession对象。

 


7.sql传参。【重要】 一个简单类型的传参,java基本数据类型叫做简单类型,在sql映射文件中sql语句用占位符#{任意字符}表示传参

8.多个参数的sql传参。【重要】命名参数: 在dao接口方法中形参位置添加@parm("自定义名") -传入的参数类型和名字。在sqlmapper中用占位符#{自定义名}使用。
eg: public List<student> list(@param("myname") string name, @param("myage") int age)
select id,name,age from student where name=#{myname} and age=#{myage} 相当于把传入的参数复制给注解的参数,然后sql语句调用该参数。

【重要】使用对象传参。dao接口方法是一个对象。 在sql语句中占位符写上对象中的属性,在调用该接口方法时,为对象传入属性值,该属性值就会被占位符所使用。
对象可以就以对应的javabean对象传入,也可以在创建一个类,里面设置对应类型属性,new对象传值给方法。
建议使用对应bean对象传值查询。

9.resultType属性。 sql语句执行后返回java对象类型,一般用于查询语句。 resultType的属性是全类名,将sql的列赋值给java对象对应的属性,属性值可以是任意类, 一般使用数据库对应的javabean类。
count(*)的查询,返回值是int类型。
【一般用于查询语句】 。

10.别名<typeAliases>:第一种方式:<typeAlias>标签。 给resultType属性定义别名。 在主配置文件中,在日志文件配置下面<typeAliases><typeAliastype="全类名" alias="别名"></></>
第二种方式【常用】:<packge>标签。<packge name="包名"> 包里面的类名就是别名。 也是在日志文件下配置。eg:<typeAliases><package="全包名" ></></>
建议不要用别名。

11.resultMap属性。 自定义一个类,将表的列用自定义类的属性替代。 使用格式。 1.定义resultMap:
<resultMap id="自定义" type=”自定义类的全类名“>
<id column="主键列名" property=”s属性名“/>
<result column="非主键列名" property="属性名"/>
</reultMap>

在查询语句中 resultmap=”自定义名“

【推荐】resultMap用于解决列名与属性名不一致的问题。
【推荐】 当类属性与列名相同时,用resultType。

【重要】 resultmap和resultType二选其一。 resultType是直接确定了类的属性名与列名一一对应。 resultMap不能确定对应关系,所以需要自己配置,往往是二者不对应时设置resultMap来调整。


11.sql模糊查询 like : select *from student where name like %?% 。 方法中需要传入%?%参数。 用String 接收参数,然后将string 传入方法。

12.动态sql:sql内容是变化的,可以根据不同条件获取不同sql,主要是where部分发生变化。
1.<if test>用法。 eg:select *from students where <if test="name!=null and name !=' ' ">name =#{name}</if> <if test="age>0">or age >#{age} </if>.
test后面是判断语句,如果满足就会执行后面的赋值。 即如果name不为空且不为空字符,就会赋值, 如果age>0就会 执行 or age>#{age}。
if 动态查询会将关键字也编译到sql语句中 (此句中的or)如果前面条件不成立,后面成立,就会是,select *from students where or age >#{age}. 导致报错。 所以需要在
where后加一个恒成立条件,1=1。
2.<where> 用法。select *from students <where><if test="name!=null and name !=' ' ">name =#{name}</if> <if test="age>0">or age >#{age} </if></where>
解决了<if test>sql条件报错问题。

3.<foreach collection="" item="" open="" close="" separator="">.......</foreach>:collection表示接口中方法参数的类型,如果是arry使用array,如果是list使用list。
item:自定义的,表示数组和集合的成员的遍历。
open:循环开始的字符。
close:循环结束的字符。
separator:集合成员之间的分隔符。

<foreach>用于条件的遍历。 方法一: 接口方法是list集合存放id ,eg public List<integer> list(List<Integer> int);
eg select * from sudent wehre id in <foreach collection="list" item="myid" open="(" close=")" separator=","> #{myid}--占位符传入item遍历。
表示 select * from students where id in(1001,1002,1003)等。
collection=传进来的list student的集合对象。 item=自定义名。 open=( 。 close=), separator=","
方法二:接口方法是关于对象的泛型。eg: public List<Student> list(List<Student> stu);
用 #{item值.属性来传入占位符的值}

13.代码片段。定义 : <sql id="定义的片段名">sql语句</sql>. 使用时在 <select>中的sql语句中用<include refid="片段名"/> 将代替sql语句。

14.数据库配置文件与主配置文件分离。 在主配置文件目录下创建一个properties文件,eg:jdbc.properties,在该文件里写上数据库的driver,url,username,password 。以key=value形式写,调用用key调用
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

使用时在主配置文件中连接数据库的 value值=“${对应的key值}” eg:value="${jdbc.driver}".


15.指定多个mapper映射的方式。 1. 在<mappers>标签中,使用多个<mapper resource="sql映射文件路径"/>来导入映射文件。
2.在<mappers>标签中使用<package name="包路径"/>来导入该包下的所有映射文件。 条件:1.sql映射文件名需要和接口一致。2. 两个文件需要在同一目录。

16.分页(pagehelper):查询的类容进行分页。eg:网购评论分页,1,2,3.........。
1.导入pagehelper依赖。
2.在主配置文件的<enviroments>上配置分页插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

3.在测试中使用pageHelper.startpage(pagenum="",pagesize="")。 pagenum:第几页。 pagesize:一页中有多少行数据。

 

原文地址:https://www.cnblogs.com/YuMartin/p/15694804.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1.pom.xml引入依赖 &lt;dependency&gt; &lt;groupId&gt;com.github.pagehelper&lt;/groupId&gt; &lt;artifactId&gt;pagehelper&lt;/artifactId&gt; &lt;version&gt;5
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt; &lt;!DOCTYPE configuration PUBLIC &quot;-//mybatis.org//DTD Config 3.0//EN&quot; &qu
准备工作 ① 创建数据库&amp;数据表 ## 创建数据库 CREATE DATABASE `dbtest1`; ## 创建数据表 CREATE TABLE `t_user` ( `id` INT NOT NULL AUTO_INCREMENT, `username` VARCHAR(20) DEF
MyBatis逆向工程是指根据数据库表结构自动生成对应的实体类、Mapper接口以及SQL映射文件的过程。这个过程可以通过MyBatis提供的逆向工程工具来完成,极大地方便了开发人员,避免了重复的代码编写,提高了开发效率。 创建逆向工程的步骤 1、添加依赖&amp;插件 &lt;!-- 控制Mave
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值。 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自
resultMap作用是处理数据表中字段与java实体类中属性的映射关系。 准备工作 ① 创建数据库&amp;数据表 CREATE DATABASE `dbtest1`; CREATE TABLE `t_emp` ( `emp_id` int NOT NULL AUTO_INCREMENT, `em
EHCache缓存针对于MyBatis的二级缓存。 MyBatis默认二级缓存是SqlSessionFactory级别的。 添加依赖 &lt;!-- MyBatis-EHCache整合包 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis.cac
MyBatis 提供了一级缓存和二级缓存的支持,用于提高数据库查询的性能,减少不必要的数据库访问。 一级缓存(SqlSession 级别的缓存) 一级缓存是 MyBatis 中最细粒度的缓存,也称为本地缓存。它存在于每个 SqlSession 的生命周期中,当 SqlSession 被关闭或清空时,
动态SQL是 MyBatis 中非常强大且灵活的功能,允许你根据不同的条件构建SQL查询。 这主要通过 &lt;if&gt;、&lt;choose&gt;、&lt;when&gt;、&lt;otherwise&gt;、&lt;foreach&gt;等标签实现。 查询场景 /** * 根据条件查询员工
本教程操作系统:windows10系统、DELL G3电脑。 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。在 MyBatis 中,配置数据库连接是非常重要的第一步。下面将详细介绍如何配置 MyBatis 的
今天小编给大家分享的是MyBatis批量查询、插入、更新、删除如何实现,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。
今天小编给大家分享的是Mybatis操作多数据源实现的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获...
本篇文章和大家了解一下mybatis集成到spring的方式有哪些。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1 前言1.1 集成spring前使用mybat...
今天小编给大家分享的是mybatis-plus分页查询的3种方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获...
本篇内容主要讲解“mybatis之BaseTypeHandler怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis...
这篇文章主要介绍了mybatisforeach怎么传两个参数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mybatisforeach怎...
这篇“MyBatis映射文件中parameterType与resultType怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的...
这篇文章主要介绍“MyBatis怎么获取自动生成的键值”,在日常操作中,相信很多人在MyBatis怎么获取自动生成的键值问题上存在疑惑,小编查阅了各式资料,整理出
这篇文章主要讲解了“怎么去掉IntelliJIDEA中mybatis对应的xml文件警告”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入...
这篇文章主要介绍“MybatisPlus使用@TableId主键id自增长无效如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这...