解析Mybatis入门第一天

   

  1. MyBatis是一个基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。
  2. MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。
  3. 采用了ORM的思想。
  4. 在数据库中新建一张表。插入数据(使用mysql数据库。我的数据库的名字:javaDemo)
  5.  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','','广州');
  6. 代码需求分析:
    1. 使用mybatis从数据库中查询数据。
    2. 创建一个java工程,导入需要的jar包
    3. 编写一个和港爱创建表相同的实体类,对数据进行封装
    4. 编写映射的配置文件,即SQL语句
    5. 编写主配置文件(配置数据库相关的信息)。加载步骤4的映射文件,这样在加载主配置文件的时候,映射的配置文件就会加载。
    6. 使用mybatis提供的API入门。。。come On
  7. 创建一个普通的Maven工程:如图

    上图什么都不用选择,直接next

  8. 给GroupId和Artifatid补充一个名字。
  9. 创建好之后就是这个页面了
  10. 在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>
    View Code
  11. 创建一个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 }
    View Code
  12.  编写一个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>
    View Code
  13. 编写一个主配置文件,主要用来配置数据库的连接,建议主配置文件的名称是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>
    View Code
  14. 最后编写一个单元测试的方法进行测试查询数据库中的结果
     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 }
    View Code

    结果:在控制台上输出

   学习网站:https://mybatis.org/mybatis-3/zh/index.html

分享之路,欢迎交流。。。

posted @ 2019-08-27 15:43  白天黑天阴天  阅读(212)  评论(0编辑  收藏  举报