Mybatis学习一
来源:互联网 发布:mac 搜狗五笔不能用 编辑:程序博客网 时间:2024/06/03 03:46
1、MyBatis介绍
MyBatis 本是apache的一个开源项目iBatis,它是一个基于java的持久层框架。
MyBatis支持普通SQL查询,存储过程和高级映射的持久层框架,使用比较简单,使用XML或者注解配置和原始映射,将接口和java的POJO(Plain Old Java Objects)映射成数据库中的记录。
2、MyBatis的环境搭建
java环境
eclipse
mysql
mybatis运行环境(jar包)
3、框架流程
1、SqlMapConfig.xml
SqlMapConfig.xml是mybatis的全局配置文件,配置数据库,数据源,事务mybatis运行环境。
2、SqlSessionFactory
根据配置文件SqlMapConfig.xml创建工厂
3、SqlSesssion
通过工厂来创建SqlSession会话,在这里操作数据库,完成SQL的增,删,改,查
4、Executor
执行SqlSession语句,操作数据库执行。
5、mapped statement
对操作数据库存储封装(sql语句,输入参数,输出结果等)
4、入门示例
1、SqlMapConfig.xml文件的配置
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><properties resource="db.properties"> <!--properties中还可以配置一些属性名和属性值 --> <!-- <property name="jdbc.driver" value=""/> --> </properties> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理,事务控制由mybatis--> <transactionManager type="JDBC" /> <!-- 数据库连接池,由mybatis管理--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <!-- 加载 映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> </mappers></configuration>
数据库文件配置
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/studentjdbc.username=rootjdbc.password=123456
2、POJO类
简单的JavaBean类
package com.example.po;public class User { private String name; private int age; private String cls; private int id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getCls() { return cls; } public void setCls(String cls) { this.cls = cls; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", cls=" + cls + ", id=" + id + "]"; }}
3、映射文件User.xml文件
在映射文件中写SQL语句
参数
id:标识映射文件的sql标识
parameterType:参数类型
resultType:返回值类型
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace命名空间--><mapper namespace="test"> <select id="findUserById" parameterType="int" resultType="com.example.po.User"> SELECT * FROM USER WHERE id=#{value} </select></mapper>
4、在SqlMapConfig.xml中加载映射文件
<mappers> <mapper resource="sqlmap/User.xml"/> </mappers>
5、单元测试
package mybatis.jdbc;import java.io.IOException;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import com.example.po.User;public class JdbcTest { @Test public void findUserByIdTest() throws IOException { // mybatis配置文件 String resource = "SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 通过工厂得到SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 通过SqlSession操作数据库 // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数 // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象 // selectOne查询出一条记录 User user = sqlSession.selectOne("test.findUserById", 1); System.out.println(user); // 释放资源 sqlSession.close(); }}
5、细节
1、参数
parameterType:输入的参数类型
resultType指定输出结果的类型
2、#{}和¥{}
#{}是一个点位符,接收的参数可以是简单类型,pojo,hashmap,
${}表示一个拼接的符号,会引起sql注入,因此不建议使用。
3、selectOne和selectList
selectOne查询一条记录进行映射。如果使用selectOne实现,也可以使用selectList实现(list中只有一条记录)
selectList表示查询列表进映射。如果有多条的话,使用selectOne则会报错。
6、传统Dao开发遇到的问题
1、dao接口实现类方法中存在大量的重复代码
2、存在很多 硬编码,不等于维护和修改
3、调用sqlsession方法时传入的变量,使用泛型,如果出错,编译时候也不会报,不利于开发。
解决办法mapper代理方法
7、mapper代理方法
1、定义接口
package com.example.mapper;import com.example.po.User;public interface UserMapper { public User findUserById(int id) throws Exception;}
2、UserMapper.xml映射文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.mapper.UserMapper"> <select id="findUserById" parameterType="int" resultType="com.example.po.User"> SELECT * FROM USER WHERE id=#{value} </select></mapper>
3、SqlMapConfig.xml文件中配置
<!-- 加载 映射文件 --> <mappers> <mapper resource="sqlmap/User.xml" /> <package name="com.example.mapper"/> </mappers>
4、测试用例
public class UserMapperTest { private SqlSessionFactory sqlSessionFactory; // 此方法是在执行testFindUserById之前执行 @Before public void setUp() throws Exception { // 创建sqlSessionFactory // mybatis配置文件 String resource = "SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息 sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); } //用户信息的综合 查询 @Test public void testFindUserById() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); //创建UserMapper对象,mybatis自动生成mapper代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //调用userMapper的方法 User user = userMapper.findUserById(1); System.out.println(user); }}
8、Sql片段
为什么使用sql片段
1、在进行Sql查询的时候,可能都要进行一些统一的操作。比如判断用户是否输入内容,如果没有内容,则不进行后续sql查询
2、一些比较常用的sql语句抽取出来,组成sql片段。
示例如下:
- mybatis学习一
- Mybatis学习日记(一)
- mybatis学习(一)
- Mybatis学习(一)
- mybatis学习(一)
- MyBatis学习(一)
- MyBatis学习(一)
- MyBatis学习总结一
- MyBatis 学习笔记一
- MyBatis学习一
- MyBatis学习笔记一
- Mybatis学习总结一
- 学习Mybatis(一)
- MyBatis学习一
- Mybatis学习一
- Mybatis学习记录一
- mybatis学习笔记一
- MyBatis学习总结(一)
- Cannot change version of project facet Dynamic Web Module to 2.5
- Chapter 6:Kernel Methods
- JavaScript 中的this用法
- android studio 使用svn版本控制完全解析
- 五子棋的各种禁手
- Mybatis学习一
- 从零开始的Java学习笔记(一):Java的变量,对象,和引用
- Hadoop之——数据类型
- npm install时报错 npm ERR!Windows_NT 6.1.7601
- AngularJs
- 背景透明,文字不透明的做法
- hadoop - mapreduce, yarn, combiner组件 笔记
- 「译」JUnit 5 系列:架构体系
- QGIS学习一