MyBatis起步
作用:封装了JDBC操作,简化数据库访问代码。
封装的功能:
1.获取连接,执行SQL,释放连接
2.SQL参数设置(可以直接传入对象,Mybtis会将对象的属性传入SQL语句)
#{属性值}取代JDBC的?占位符
3.执行结果映射成实体对象。JDBC中需要开发者自己转换。
实体类的属性名与查询结果集ResultSet的列名保持一致,结果集有别名的话以别名为属性名。
开发者工作:写SQL语句和实体类,然后使用SqlSession对象执行SQL操作。
Mybatis结构

SqlMapconfig.xml文件
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="XDP" />
</dataSource>
</environment>
</environments>
<mappers>
<!--注册uerMapper.xml文件,resource是其路径,通常和实体类在一个目录中,也可单独建一个文件专门放Mapper.xml-->
<mapper resource="org/tarena/entity/userMapper.xml"/>
</mappers>
</configuration>
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,通常设置成包名+sql映射的文件名-->
<mapper namespace="myBatis.test.Demo.userMapper">
<!-- 在select/insert/delete标签中编写SQL语句;
设置唯一的id属性,将来SqlSession通过id调用sql语句;
parameterType指明查询时使用的参数类型。如果参数只有1个则用简单类型,参数为多个时可用Map集合或实体对象,占位符用对象的属性名;
resultType表示查询结果将要封装成的实体类,也可以为Map类型或基本类型-->
<select id="getUserByID" parameterType="int" resultType="myBatis.test.User">
select * from users where id=#{propertyName}
</select>
<insert id="save" parameterType="myBatis.test.User">
insert into user(name,salary,age) values (#{name},#{salary},#{age})
</insert>
</mapper>
获取SqlSession操作sql语句:
//工具类
public class MyBatisUtil {
public static SqlSession getSqlSession {
//mybatis的配置文件
String conf = "SqlMapConfig.xml";
//使用类加载器加载mybatis的配置文件
InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(conf);
//构建sqlSession的工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
SqlSession session = sessionFactory.openSession();
return session;
}
}
//执行SQL语句
public class TestEMP {
public static void main(String[] args) throws IOException {
SqlSession session=MyBatisUtil.getSqlSession();
//直接返回封装好的对象
User user=session.selectOne("getUserByID",10);
//other word
session.commit(); //增删改必须提交事务
session.close(); //释放session
}
}
返回Map类型的结果集
如果需要全部字段时可以和实体类映射。如果仅查询部分字段,没必要用实体类封装,可以用Map进行封装,key为列名,value为对应的字段值。
resultType =”java.util.HashMap”
当封装的实体对象的属性和查询结果的字段名不一致时,可以将结果集的别名改为和实体对象的属性一致。
或者使用resultMap属性代替resultType属性,显式指定映射关系。如下所示:
<!-- type为返回的封装对象,property为实体类属性名,column为表的列名-->
<!-- 主键用id元素指定匹配规则,非主键用result指定匹配规则;一致时可以省略-->
<resultMap id="userMap" type="myBatis.test.User">
<id property="id" column="user_id"></id>
<result prompt="name" column="name"></result>
</resultMap>
Mapper映射接口规则
需要编写DAO接口的实现类,给controll或service使用。

如果开发者按照MyBatis的规则定义DAO接口,实现类就不用写了,框架会动态地在内存中创建实现类。
1. 根据SQL定义文件中的id属性当接口的方法名
2. 根据SQL定义文件中的parameterType类型当方法参数类型
3. 根据SQL定义文件中的resultType类型定义方法返回的类型
(多行使用List<T>;单行使用T类型)
4. 将SQL定义文件<mapper>的namespace属性指定成包名+DAO的接口名
//定义DAO接口
public interface UserDao{
public User getUserByID(int id);
public void save(User user);
}
使用:
UserDao userDao = Session.getMapper(UserDao.class);//接口实现的对象
User user=userDao.getUserByID("10");
Mybatis与Spring的整合
Mybatis-spring.jar整合包,包含以下组件:
1) SqlSessionFactoryBean组件:封装了创建SqlSessinFactory的过程。
在applictionContext.xml中配置MapperFactoryBean组件
2) MapperFactoryBean组件:封装了根据Mapper映射器接口生成实现组件的功能。
不用再调用session.getMapper(UserDao.class),生成的bean会加入spring容器中,直接调用该bean实例的方法执行sql语句。
一个bean只能给一个mapper接口生成实现组件。

<!--定义MapperFactoryBean
一次只能为一个Mapper接口生成实现组件;id为实现接口的对象,value为实现的mapper接口;ref为引用的SqlSession资源;可以注入到service中直接使用。-->
<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="myBatis.test.Demo.userMapper"></property>
<property name="sqlSessionFactory" ref="ssf"></property>
</bean>
<!--创建SqlSessionFactory,定义SqlSession资源-->
<!-- 整合后不需要myBatis主配置文件,相关信息以注入的方式加入到此 -->
<bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入dataSource -->
<property name="dataSource" ref="dbcp" />
<!-- 注入SQL语句文件 -->
<property name="configLocation" value="classpath:org/mybaits/*.xml"></property>
</bean>
<!-- 定义dbcp的DataSource -->
<bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">
<property name="username" value="root" />
<property name="password" value="123" />
<property name="url" value="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8"></property>
<property name="driver" value="com.mysql.jdbc.Driver"/>
</bean>
测试与使用
public class TestMybatis {
private static ApplicationContext cxt;
public static void main(String[] args) {
// TODO 自动生成的方法存根
cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = cxt.getBean("UserDao",UserDao.class);
List<User> list = userDao.findAll();
for (User user : list){
System.out.println(user.getName());
}
}
}
3) MapperScannerConfiger组件,封装了批量生成Mapper接口组件的功能。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- value设置包路径,可以使用分号或逗号作为分隔符设置多个包路径。 -->
<property name="basePackage" value="myBatis.test.Demo" />
<!-- 只有具备该注解标记的接口才会被自动实现 -->
<property name="annotationClass" value="myBatis.test.annotation.MyBatisDao" />
<!-- sqlSessionFactory会自动注入 -->
<property name="sqlSessionFactory" ref="ssf"></property>
</bean>
4) SqlSessionTemplate组件:自己编写Dao接口实现类时可以简化编程。

Spring整合MyBatis结构:

MyBatis起步的更多相关文章
- MyBatis起步搭建
1 步骤 数据库环境 创建Maven项目 导入依赖 编写MyBatis配置文件 编写MyBatis工具类 编写实体类 编写Mapper 测试 2 数据库环境 MySQL 8.0版本 create da ...
- Spring Boot-整合Mybatis(五)
原始的整合方式 1.添加依赖 <!--mybatis起步依赖--> <dependency> <groupId>org.mybatis.spring.boot< ...
- SpringBoot+SpringMVC+MyBatis快速整合搭建
作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。
1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查
使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...
- SpringBoot的学习二:整合Redis,JPA,Mybatis
Redis介绍: 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API 特性: Redis 与其他 key - value 缓 ...
- 001 SringBoot基础知识及SpringBoot整合Mybatis
1.原有Spring优缺点分析 (1)优点 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品.无需开发重量级的Enterprise J ...
- 0001SpringBoot整合Mybatis
SpringBoot整合Mybatis主要分为以下几个步骤: 1.添加Mybatis的起步依赖(pom.xml) 2.添加数据库驱动坐标(pom.xml) 3.添加数据库连接信息(applicatio ...
- springboot关联Mybatis和Redis依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
随机推荐
- Java版权信息之Jautodoc
Java项目开发中,常常需要在编码文件上面加上一些版权声明或者类注释,如果文件很多,手工去添加或者修改,会很麻烦.可以利用工具满足我们的要求.一.版权声明可以使用Jautodoc.将jautodoc的 ...
- 使用EPPlus读写xlsx文件
朋友有个需求,想对N张excel表做过滤和合并的处理,拜托我写个小程序.因为用户的背景是非专业用户,因此最好的选择是写个GUI程序,再加上读写excel的需求,所以我的首选就是C#的WinForm了. ...
- 《Java Performance》笔记1——性能分析基础 2
4.内存使用率: 内存使用率的相关属性包括页面调度或页面交换.加锁.线程迁移中的让步式和抢占式上下文切换. 当应用运行所需的内存超过可用物理内存时,就会发生内存页面交换,系统在进行页面交换或使用虚拟内 ...
- javascript执行顺序小结
作为web开发人员,一定要对js的执行顺序,解析原理有一定了解,否则无法掌控这门小巧好用的语言 javascript是一门实现网页动态效果的语言,也是主要负责和服务端的交互,他抛弃了像java中类的束 ...
- SQLite 数据库
内容来源:高成珍.钟元生<Android编程经典案例解析> SQLite 数据库是Android 中内嵌的轻量级关系型数据库,本质上只是一个文件.SQLite 内部只支持NULL,INTE ...
- Centos/RHEL上查看主板型号
老是搞忘记,专门做个记录: [root@media ~]# dmidecode | grep "Product Name" Product Name: To be filled b ...
- 08 Noise and Error
噪声:误标.对同一数据点的标注不一致.数据点信息不准确... 噪声是针对整个输入空间的. 存在噪声的情况下,VC bound依旧有用: 存在噪声,就是f--->p(y|x),f是p的特殊情况:如 ...
- 跟着刚哥梳理java知识点——流程控制(六)
分支结构(if…else .switch) 1.if else 语句格式 if(条件表达式){ 执行代码块; } else if(条件表达式){ 执行代码块; } else{ 执行代码块; } 2.s ...
- activity生命周期分析(两个activity之间跳转的生命周期执行顺序)
NoteMainActivity点击跳转至NoteListActivity 我们都了解: 当A界面点击进入B界面时,此时 A===onPause--->onStop ...
- Ranking Relevance小结
Ranking Relevance是搜索排序算法的各个影响因子中相当重要的一个部分.对于Ranking Relevance的计算,过去的技术往往分为两个大的方向:Click Behavior和Text ...