解析Mybatis入门第一天
- MyBatis是一个基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。
- MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。
- 采用了ORM的思想。
- 在数据库中新建一张表。插入数据(使用mysql数据库。我的数据库的名字:javaDemo)
-
1 CREATE TABLE `NBAPlaers` ( 2 `id` int(11) NOT NULL auto_increment, 3 `username` varchar(32) NOT NULL COMMENT '用户名称', 4 `birthday` datetime default NULL COMMENT '生日', 5 `sex` char(1) default NULL COMMENT '性别', 6 `address` varchar(256) default NULL COMMENT '地址', 7 PRIMARY KEY (`id`) 8 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 9 10 insert into `NBAPlaers`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'Lebron','2018-02-27 17:47:08','男','北京'),(2,'Kobe','2018-03-02 15:09:37','女','上海'),(3,'Irving','2018-03-04 11:34:34','女','深圳'),(4,'Davis','2018-03-04 12:04:06','男','广州');
- 代码需求分析:
- 使用mybatis从数据库中查询数据。
- 创建一个java工程,导入需要的jar包
- 编写一个和港爱创建表相同的实体类,对数据进行封装
- 编写映射的配置文件,即SQL语句
- 编写主配置文件(配置数据库相关的信息)。加载步骤4的映射文件,这样在加载主配置文件的时候,映射的配置文件就会加载。
- 使用mybatis提供的API入门。。。come On
- 创建一个普通的Maven工程:如图
上图什么都不用选择,直接next
- 给GroupId和Artifatid补充一个名字。
- 创建好之后就是这个页面了
- 在pom.xml文件中引入需要的坐标
<dependencies> <!-- mybatis坐标 --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql驱动包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <!--日志--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
- 创建一个NBAPlaers的实体类,实现接口Serializable
1 package zh.test.domain; 2 3 import java.io.Serializable; 4 import java.util.Date; 5 6 /* 7 编写一个User的实体类,并且实现Serializable接口,目的只是表示一个类的对象可以被序列化。 8 什么是Serializable接口? 9 一个对象序列化的接口,一个类只有实现了Serializable接口,他的对象才能被序列化 10 */ 11 public class NBAPlaers implements Serializable { 12 private Integer id; 13 private String username; 14 private Date birthday; 15 private String sex; 16 private String address; 17 18 @Override 19 public String toString() { 20 return "NBAPlaers{" + 21 "id=" + id + 22 ", username='" + username + '\'' + 23 ", birthday=" + birthday + 24 ", sex='" + sex + '\'' + 25 ", address='" + address + '\'' + 26 '}'; 27 } 28 29 public Integer getId() { 30 return id; 31 } 32 33 public void setId(Integer id) { 34 this.id = id; 35 } 36 37 public String getUsername() { 38 return username; 39 } 40 41 public void setUsername(String username) { 42 this.username = username; 43 } 44 45 public Date getBirthday() { 46 return birthday; 47 } 48 49 public void setBirthday(Date birthday) { 50 this.birthday = birthday; 51 } 52 53 public String getSex() { 54 return sex; 55 } 56 57 public void setSex(String sex) { 58 this.sex = sex; 59 } 60 61 public String getAddress() { 62 return address; 63 } 64 65 public void setAddress(String address) { 66 this.address = address; 67 } 68 }
-
编写一个UserMapper.xml的文件,
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!--约束 dtd约束--> 3 <!DOCTYPE mapper 4 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 5 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 6 <!-- 7 namespace:用来区分mapper接口的,一般写mapper的全路径 8 --> 9 <mapper namespace="zh.test.mapper.UserMapper"> 10 <!-- 11 id属性:表示接口中方法的名称 12 resultType:方法返回值类型,全限定路径(包名+类名) 13 --> 14 <select id="findAll" resultType="zh.test.domain.NBAPlaers"> 15 /* 16 编写对应的sql语句 17 */ 18 select * from NBAPlaers; 19 </select> 20 </mapper>
- 编写一个主配置文件,主要用来配置数据库的连接,建议主配置文件的名称是SqlMapConfig.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!--配置多个环境--> 7 <environments default="mysql"> 8 <!--配置环境--> 9 <environment id="mysql"> 10 <!--配置事物管理,使用本地的事物策略--> 11 <transactionManager type="JDBC"></transactionManager> 12 <!--是否要是要连接池 POOLED UNPOOLED--> 13 <dataSource type="POOLED"> 14 <property name="driver" value="com.mysql.jdbc.Driver"/> 15 <property name="url" value="jdbc:mysql://127.0.0.1:3306/javaDemo?characterEncoding=utf8"/> 16 <property name="username" value="root"/> 17 <property name="password" value="root"/> 18 19 <!--<property name="url" value="jdbc:mysql:///javaDemo"/>--> 20 </dataSource> 21 </environment> 22 </environments> 23 <!--引入映射的配置文件--> 24 <mappers> 25 <mapper resource="mappers/Usermapper.xml"></mapper> 26 </mappers> 27 </configuration>
- 最后编写一个单元测试的方法进行测试查询数据库中的结果
1 package zh.test; 2 3 import org.apache.ibatis.annotations.Result; 4 import org.apache.ibatis.io.Resources; 5 import org.apache.ibatis.session.SqlSession; 6 import org.apache.ibatis.session.SqlSessionFactory; 7 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 8 import org.apache.log4j.lf5.util.Resource; 9 import org.junit.Test; 10 import zh.test.domain.NBAPlaers; 11 import zh.test.mapper.UserMapper; 12 13 import java.io.IOException; 14 import java.io.InputStream; 15 import java.util.List; 16 17 public class Demo { 18 @Test 19 public void findUserAll() throws IOException { 20 //加载主配置文件,构建SqlSessionFactory的对象 21 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig"); 22 //创建sqlSession对象 23 SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); 24 //通过工厂对象,获取sqlSession对象 25 SqlSession sqlSession = build.openSession(); 26 //调用sqlsession对象,并遍历 27 List<NBAPlaers> list = sqlSession.selectList("zh.test.mapper.UserMapper.findAll"); 28 for (NBAPlaers user:list) 29 { 30 System.out.println(user); 31 } 32 sqlSession.close(); 33 resourceAsStream.close(); 34 } 35 36 @Test 37 public void findUserAll2() throws IOException { 38 //加载主配置文件 39 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig"); 40 SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); 41 SqlSession sqlSession = build.openSession(); 42 //获取到代理对象,mybatis框架生成代理对象 43 UserMapper mapper = sqlSession.getMapper(UserMapper.class); 44 //mapper指向就是代理对象 45 List<NBAPlaers> allPlayers = mapper.findAll(); 46 for(NBAPlaers user:allPlayers) 47 { 48 System.out.println(user); 49 } 50 sqlSession.close(); 51 resourceAsStream.close(); 52 } 53 }
结果:在控制台上输出
学习网站:https://mybatis.org/mybatis-3/zh/index.html
分享之路,欢迎交流。。。