mybatis
从0开始学习mybatis
一.持久层框架技术解决方案
二.Mybatis入门案例
一.持久层框架技术解决方案
l JDBC技术:
Connection
PreparedStatement
ResultSet
l Spring的jdbcTemplate
Spring中对jdbc的简单封装
l Apache的DBUtils
对jdbc的简单封装
l 但是:Spring的jdbcTemplate和Apache的DBUtils都不是框架,只是工具类
传统jdbc代码:
1 public class demo2 { 2 3 public static void main(String[] args) { 4 5 Connection con = null; 6 Statement st = null; 7 ResultSet rs = null; 8 9 try { 10 //注册驱动 11 Class.forName("com.mysql.jdbc.Driver"); 12 13 //建立连接 14 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/study2", "root", "123"); 15 16 //创建操作sql语句的Statement对象 17 st = con.createStatement(); 18 19 //创建sql语句 20 String sql = "select*from student"; 21 22 //操作sql语句,返回一个结果集 23 rs = st.executeQuery(sql); 24 25 //遍历结果集,输出 26 while (rs.next()) { 27 int id = rs.getInt("id"); 28 String name = rs.getString("username"); 29 String password = rs.getString("password"); 30 String email = rs.getString("email"); 31 32 System.out.println(id+" "+name+" "+password+" "+email); 33 } 34 35 } catch (ClassNotFoundException e) { 36 e.printStackTrace(); 37 } catch (SQLException e) { 38 e.printStackTrace(); 39 }finally{ 40 try { 41 if(rs != null) 42 rs.close(); 43 if(st != null) 44 st.close(); 45 if(con != null) 46 con.close(); 47 con.close(); 48 } catch (SQLException e) { 49 e.printStackTrace(); 50 } 51 } 52 } 53 54 }

Mybatis概述
l 持久层框架,java编写。
l 封装jdbc操作细节,关注sql语言本身,无需注册驱动,创建连接。。。
l ORM实现结果集封装。
ORM:(Object Relational Mapping)
对象关系映射
:把数据库表和实体类及实体类属性对应起来,让我们操作实体类实现操作数据库表
二.Mybatis入门案例
编译软件:IDEA2018 mysql8
Mybatis的环境搭建
- 创建maven工程并导入坐标
- 创建实体类和Dao接口
- 创建mybatis的主配置文件:SqlMapConfig.xml
- 创建映射配置文件:IProDao.xml
- mybatis的配置文件位置必须和dao接口的包结构相同
- 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
- 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
!!!无需再写实现类
一览目录结构:

pom.xml文件:依赖包可从mybatis官网找到 https://mybatis.org/mybatis-3/getting-started.html
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
小贴士:
在实体类的编写过程中,常常需要应用大量的get、set方法,需要写大量的重复代码,即有的工具有自动生成功能,当时也会使实体类中产生大量冗余代码,使得代码变,springboot为我们提供了相应注解可以解决这类问题----@Data
接下来简明扼要的介绍一下@Data注解的功能与使用方法
## 注解功能
1、@Data可以为类提供读写功能,从而不用写get、set方法。
2、他还会为类提供 equals()、hashCode()、toString() 方法。
l 使用方法--一下仅提供idea的使用方法
1、下安装lombok插件
2、重启idea
3、在maven库中添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
4、在实体类上添加@Data注解即可生效
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> <!-- 和spring整合后 environments配置将废除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理 --> <transactionManager type="JDBC" /> <!-- 数据库连接池 --> <dataSource type="POOLED"> <!--配置连接数据库的四个基本信息,mysql 8--> <property name="driver" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/sys? useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"/> <property name="username" value="root" /> <property name="password" value="123456" /> <!--配置连接数据库的四个基本信息,mysql 5--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/TryMyBatis"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--指定映射配置文件的位置,映射配置文件指每个dao独立的配置文件--> <mappers> <!-- 第一种方式,加载 resource--> <mapper resource="com/it/Dao/IUserDao.xml"></mapper> <!-- 第三种方式,包扫描器要求(推荐使用此方式): 1、映射文件与接口同一目录下 2、映射文件名必需与接口文件名称一致 --> <!--<package name="com.cenobitor.mapper"/>--> </mappers> </configuration>
Dao接口:com.it.Dao.IUserDao
package com.it.Dao; import com.it.Domain.User; import java.util.List; public interface IUserDao { List<User> findAll(); }
mapper映射文件:com.it.Dao.IUserDao.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.it.Dao.IUserDao"> <!--配置查询所有--> <select id="findAll" resultType="com.it.Domain.User"> select * from user </select> </mapper>
com.it.Domain.User
package com.it.Domain; import lombok.Data; import java.io.Serializable; import java.util.Date; @Data public class User implements Serializable { private Integer id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 }
test:
package com.qinlu; import com.it.Dao.IUserDao; import com.it.Domain.User; 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 java.io.InputStream; import java.util.List; public class MybatisTest { /** * 入门案例 * @param args */ public static void main(String[] args) throws Exception{ //读取配置文件 InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml"); //创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); //工人builder帮我建造工厂 SqlSessionFactory factory=builder.build(in); //使用工厂生产SqlSession对象 SqlSession session=factory.openSession(); //使用SqlSession创建dao接口代理对象 IUserDao userDao = session.getMapper(IUserDao.class); //使用代理对象执行方法 List<User> users = userDao.findAll(); for (User user:users){ System.out.println(user); } //释放资源 session.close(); in.close(); } }
log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal log4j.rootCategory=debug, CONSOLE, LOGFILE # Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=d:axis.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
运行结果:

浙公网安备 33010602011771号