SSM_MyBatis
1. 简介
-
MyBatis是一款优秀的持久层框架
-
它支持定制化SQL、存储过程以及高级映射。
-
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
-
MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO(Plain Old JavaObjects,普通老式Java对象)为数据库中的记录。
-
MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis 。
-
2013年11月迁移到Github。
1.1 获得MyBatis
-
Maven仓库:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency>
1.2 持久化
数据持久化
-
持久化就是将程序的数据在持久状态和瞬时状态转化的过程
-
内存 : 断电即失
-
数据库(JDBC) , io文件持久化
1.3 持久层
Dao层,Service层,Controller层....
-
完成持久化工作的代码块
-
层界限十分明显。
1.4 为什么需要MyBatis?
-
方便
-
传统JDBC代码太复杂 , 简化 , 框架 , 自动化
-
优点 :
-
简单易学
-
灵活
-
SQL和代码的分离,提高了可维护性
-
提供映射标签,支持对象与数据库的orm字段关系映射
-
提供对象关系映射标签,支持对象关系组建维护
-
提供xml标签,支持编写动态sql
-
-
使用的人多
2. 第一个程序
CREATE DATABASE `mybatis`; ? USER `mybatis`; ? CREATE TABLE `user`( `id` INT(20) NOT NULL PRIMARY KEY, `name` VARCHAR(30) DEFAULT NULL, `pwd` VARCHAR(30) DEFAULT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; ? INSERT INTO `user` (`id`,`name`,`pwd`) VALUES (1,‘张三‘,‘123456‘), (2,‘李四‘,‘123456‘), (3,‘王五‘,‘123456‘)
新建项目 :
-
新建一个空的Maven项目
-
删除src文件夹
-
导入Maven依赖
<dependencies> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
创建模块 :
配置文件请参照中文文档 :https://mybatis.org/mybatis-3/zh/index.html
-
编写mybatis核心配置文件 (mybatis-config.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核心配置文件--> <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?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> </configuration>
-
编写mybatis工具类
public class MybatisUtil { private static SqlSessionFactory sqlSessionFactory; static { try { //1. 获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //2. 有了SqlSessionFactory,就可以从中获得SqlSession实例,其中完全包含了面向数据库执行SQL命令所需的所有方法 public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } }
注意 : sqlSessionFactory提高作用域后记得不要再新静态块中再次定义,否则报错空指针异常
编写方法 :
-
实体类
public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name=‘" + name + ‘\‘‘ + ", pwd=‘" + pwd + ‘\‘‘ + ‘}‘; } }
-
Dao接口
public interface UserDao { List<User> getUserList(); }
-
接口实现类(UserMapper.xml) -- 由UserDaoImpl转换为Mapper配置文件
<?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"> <!--绑定一个对应Dao/Mapper接口--> <mapper namespace="com.study.dao.UserDao"> <!--Select查询语句:id方法,resultType结果类型--> <select id="getUserList" resultType="com.study.pojo.User"> select * from mybatis.user </select> </mapper>
测试 !
接口UserDao下方法List<User> getUserList();后右键 --> Go To --> Test 创建测试
public class UserDaoTest extends TestCase { @Test public void test(){ //1. 获得SqlSession对象 SqlSession sqlSession = MybatisUtil.getSqlSession(); //2. 方式一: 执行SQL UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } //2. 方式二: (旧方法,不推荐) /* List<Object> objects = sqlSession.selectList("com.study.dao.UserDao.getUserList"); for (Object user : objects) { System.out.println(user); } */ //3. 关闭SqlSession sqlSession.close(); } }
项目目录
可能遇到的遇到问题
1.配置文件没有注册
2.绑定接口错误
3.方法名不对
4.返回类型不对
5.Maven导出资源问题
<!--pom.xml -- 在build中配置resources,来防止我们资源导出失败的问题--> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>