01.mybatis
mybatis: 一个持久层框架,支持定制化的SQL,存储过程及高级映射;
==========================================
01. 创建Marven工程;
02. 配置依赖
1 <dependencies> 2 <!--mybatis依赖--> 3 <dependency> 4 <groupId>org.mybatis</groupId> 5 <artifactId>mybatis</artifactId> 6 <version>3.5.5</version> 7 </dependency> 8 <!--mySql依赖--> 9 <dependency> 10 <groupId>mysql</groupId> 11 <artifactId>mysql-connector-java</artifactId> 12 <version>8.0.24</version> 13 </dependency> 14 <!--日志依赖--> 15 <dependency> 16 <groupId>log4j</groupId> 17 <artifactId>log4j</artifactId> 18 <version>1.2.12</version> 19 </dependency> 20 <!--测试依赖--> 21 <dependency> 22 <groupId>junit</groupId> 23 <artifactId>junit</artifactId> 24 <version>4.12</version> 25 <scope>test</scope> 26 </dependency> 27 </dependencies>
03. 数据表实体类的开发 (实体类按表中列名进行配置)
1 public class User implements Serializable { 2 private Integer id; 3 private String username; 4 private Date birthday; 5 private String sex; 6 private String address; 7 8 public Integer getId() { 9 return id; 10 } 11 12 public void setId(Integer id) { 13 this.id = id; 14 } 15 16 public String getUsername() { 17 return username; 18 } 19 20 public void setUsername(String username) { 21 this.username = username; 22 } 23 24 public Date getBirthday() { 25 return birthday; 26 } 27 28 public void setBirthday(Date birthday) { 29 this.birthday = birthday; 30 } 31 32 public String getSex() { 33 return sex; 34 } 35 36 public void setSex(String sex) { 37 this.sex = sex; 38 } 39 40 public String getAddress() { 41 return address; 42 } 43 44 public void setAddress(String address) { 45 this.address = address; 46 } 47 48 @Override 49 public String toString() { 50 return "User{" + 51 "id=" + id + 52 ", username='" + username + '\'' + 53 ", birthday=" + birthday + 54 ", sex='" + sex + '\'' + 55 ", address='" + address + '\'' + 56 '}'; 57 } 58 }
04.数据持久层接口配置 (下面代码展示的是注解方式,如果是XML配置方式,取消注解,同时在资源中配置好相应的配置文件)
public interface IUserDao { /** * 查询所有 * * @return */ @Select("select * from user") List<User> findAll(); }
05.mybatis配置文件处理
a. 在Resource目录下,创建配置文件 SqlMapConfig.xml (配置文件名称可自定义,无特殊要求);
b. 配置Config的头部约束条件
<?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">
c. 注解方式下的配置
<!--mybatis的主配置文件--> <configuration> <!--配置环境--> <environments default="mysql"> <!--配置mysql的环境--> <environment id="mysql"> <!--配置事务类型--> <transactionManager type="JDBC"></transactionManager> <!--配置数据源(连接池)--> <dataSource type="POOLED"> <!--配置四项参数--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/framelearn"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件--> <mappers> <mapper class="org.example.dao.IUserDao"/> </mappers> </configuration>
XML配置方式下的配置如下 (mapper不同,其它一样) --> resource指定的是资源目录下的模块配置文件
<!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件--> <mappers> <mapper resource="org/example/dao/IUserDao.xml"/> </mappers>
d. 若为XML配置模式,则需要在资源目录下,配置相应的配置文件 (注解模式下,不需要配置这个XML文件)
配置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">
配置Mapper (直接粘贴在文件头下面即可)
<mapper namespace="org.example.dao.IUserDao"> <!--配置查询所有--> <select id="findAll" resultType="org.example.domain.User"> select * from user ; </select> </mapper>
05. 上述配置完成后,即可开始测试案例
1 public class MybatisTest { 2 public static void main(String[] args) throws IOException { 3 //1.读取配置文件 4 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); 5 //2.创建SqlSessionFactory工厂 6 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 7 SqlSessionFactory factory = builder.build(in); 8 //3.使用工厂生产SqlSession对象 9 SqlSession sqlSession = factory.openSession(); 10 //4.使用SqlSession创建DAO接口的代理对象 11 IUserDao userDao = sqlSession.getMapper(IUserDao.class); 12 //5.使用代理对象取数 13 List<User> users = userDao.findAll(); 14 for(User user:users){ 15 System.out.println(user); 16 } 17 //6.资源释放 18 sqlSession.close(); 19 in.close(); 20 } 21 }
各模式的应用说明