入门第二天

目的:使用Mybatis对数据库中的数据进行简单的操作。例如:增、删、改、查、

前言:同样是使用idea创建一个普通的maven工程(如何创建一个普通的Maven工程可以参考入门第一天的详解)。

   第一天:https://www.cnblogs.com/LBJLAKERS/p/11324234.html

   数据库中的表仍然使用第一天的数据库表(新建表和添加数据的sql语句见第一天的分析)。

代码来了。。。。。。。。。。。。。。

  首先看一下所有的文件的路径和结构

解析Mybatis入门第二天-LMLPHP

  1. 在pom.xml文件中导入坐标

     <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion> <groupId>zh.test.mybatis</groupId>
    <artifactId>zh_mybatis02</artifactId>
    <version>1.0-SNAPSHOT</version>
    <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> </project>
  2. 添加一个NBAPlaers的Java文件,对应数据库中的字段
     package zh.test.domain;
    
     import java.io.Serializable;
    import java.util.Date; /*
    编写一个User的实体类,并且实现Serializable接口,目的只是表示一个类的对象可以被序列化。
    什么是Serializable接口?
    一个对象序列化的接口,一个类只有实现了Serializable接口,他的对象才能被序列化
    */
    public class NBAPlaers implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address; @Override
    public String toString() {
    return "NBAPlaers{" +
    "id=" + id +
    ", username='" + username + '\'' +
    ", birthday=" + birthday +
    ", sex='" + sex + '\'' +
    ", address='" + address + '\'' +
    '}';
    } public Integer getId() {
    return id;
    } public void setId(Integer id) {
    this.id = id;
    } public String getUsername() {
    return username;
    } public void setUsername(String username) {
    this.username = username;
    } public Date getBirthday() {
    return birthday;
    } public void setBirthday(Date birthday) {
    this.birthday = birthday;
    } public String getSex() {
    return sex;
    } public void setSex(String sex) {
    this.sex = sex;
    } public String getAddress() {
    return address;
    } public void setAddress(String address) {
    this.address = address;
    }
    }
  3. 新建一个UserMapper的接口,里面主要是要对数据库进行的哪些操作。如下:进行了多种操作

     package zh.test.mapper;
    
     import zh.test.domain.NBAPlaers;
    
     import java.util.List;
    
     /*
    用户映射接口
    */
    public interface UserMapper {
    //查询所有的数据
    public List<NBAPlaers> findAll();
    //根据条件查询
    public NBAPlaers findById(int id);
    //插入数据
    public int insert(NBAPlaers nbaPlaers);
    //修改数据
    public int update(NBAPlaers nbaPlaers);
    //删除一条数据
    public int delete(int id);
    //模糊查询
    public List<NBAPlaers> findBylike(NBAPlaers name);
    //聚合函数查询
    public int findcount();
    }
  4. 写一个jdbc.properties的属性文件,用来编写连接数据库的配置
     driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://127.0.0.1:3306/javaDemo?characterEncoding=utf8
    username=root
    password=root
  5. 配置SqlMapConfig.xml。读取数据库的属性配置文件,配置环境。以及加载
    Usermapper.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>
    <!--加载jdbc的属性配置文件-->
    <properties resource="jdbc.properties"/>
    <!--配置实体类的别名-->
    <typeAliases>
    <!--
    type:实体类的全路径
    alias:取的一个别名,不区分大小写,在配置文件调用这个实体类的时候就可以使用别名。
    -->
    <typeAlias type="zh.test.domain.NBAPlaers" alias="nbaers"/>
    <!--如果有多个实体类可以写为:包名。别名则就是【类名】-->
    <!--<package name="zh.test.domain"/>-->
    </typeAliases>
    <!--配置多个环境-->
    <environments default="mysql">
    <!--配置环境-->
    <environment id="mysql">
    <!--配置事物管理,使用本地的事物策略-->
    <transactionManager type="JDBC"></transactionManager>
    <!--是否要是要连接池 POOLED UNPOOLED-->
    <dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
    <!--<property name="url" value="jdbc:mysql:///javaDemo"/>-->
    </dataSource>
    </environment>
    </environments>
    <!--引入映射的配置文件-->
    <mappers>
    <mapper resource="mappers/Usermapper.xml"></mapper>
    </mappers>
    </configuration>
  6. 编写相对应的Usermapper.xml文件,用来编写有关对数据操作的配置
     <?xml version="1.0" encoding="UTF-8"?>
    <!--约束 dtd约束-->
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!--
    namespace:用来区分mapper接口的,一般写mapper的全路径
    --> <mapper namespace="zh.test.mapper.UserMapper">
    <!--
    id属性:表示接口中方法的名称
    resultType:方法返回值类型,全限定路径(包名+类名)
    -->
    <select id="findAll" resultType="zh.test.domain.NBAPlaers">
    /*
    编写对应的sql语句
    */
    select * from NBAPlaers;
    </select>
    <!--根据条件查询-->
    <!--
    id:findById 方法的名称
    parameterType:方法参数的类型
    resultType:方法返回值的类型 ? 不能使用?作为占位符,使用#{} 或${}来编写,推荐使用#{}
    区别:1、#{}.
    2、${}
    以上两种,当方法的参数为【引用类型】的时候,两种都可以使用,没有区别
    当方法的参数为【普通数据类型(int double )】推荐使用#{此处的方法的名字可以随意命名},但是${此处的方法的名字的参数必须与写value}
    -->
    <select id="findById" parameterType="java.lang.Integer" resultType="zh.test.domain.NBAPlaers">
    select * from NBAPlaers where id=#{id}
    </select>
    <!--新增-->
    <!--
    #{OGNL表达式}:对象导航语言,表达式语言。语法和el表达式相似
    el表达式只能在jsp页面上使用。OGNL表达式既可以在页面上又可以在配置文件中使用。
    -->
    <insert id="insert" parameterType="zh.test.domain.NBAPlaers">
    -- keyProperty="封装数据使用的属性"
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
    select last_insert_id();
    </selectKey>
    insert into NBAPlaers (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address});
    </insert>
    <!--修改数据-->
    <update id="update" parameterType="zh.test.domain.NBAPlaers">
    update NBAPlaers set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id};
    </update>
    <!--删除一条数据-->
    <delete id="delete" parameterType="java.lang.Integer">
    delete from NBAPlaers where id=#{id};
    </delete>
    <!--模糊查询-->
    <select id="findBylike" parameterType="java.lang.String" resultType="zh.test.domain.NBAPlaers">
    select * from NBAPlaers where username like #{username}
    </select>
    <!--聚合函数查询-->
    <select id="findcount" resultType="java.lang.Integer">
    select COUNT(*) from NBAPlaers;
    </select>
    <!--
    resultMap:用来进行数据的封装
    id="唯一的名称,用来被引用"
    type="进行数据封装的数据的类型"
    -->
    <resultMap id="nbaMapper" type="zh.test.domain.NBAPlaers">
    <!--
    property="JavaBean中的属性"
    column="表中的字段"
    -->
    <result property="id" column="id"></result>
    <result property="username" column="_username"></result>
    <result property="sex" column="_sex"></result>
    <result property="address" column="_address"></result>
    </resultMap>
    </mapper>
  7. 最后。。。。对相应的功能进行测试
     package test;
    
     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 org.junit.Test;
    import zh.test.domain.NBAPlaers;
    import zh.test.mapper.UserMapper; import java.io.IOException;
    import java.io.InputStream;
    import java.net.SocketTimeoutException;
    import java.util.Date;
    import java.util.List; public class Demo { @Test
    public void findUserAll() throws IOException {
    //加载主配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = build.openSession();
    //获取到代理对象,mybatis框架生成代理对象
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    //mapper指向就是代理对象
    List<NBAPlaers> allPlayers = mapper.findAll();
    for(NBAPlaers user:allPlayers)
    {
    System.out.println(user);
    }
    sqlSession.close();
    resourceAsStream.close();
    } @Test
    public void findById() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = build.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    NBAPlaers nbaPlaer = mapper.findById(2);
    System.out.println(nbaPlaer);
    sqlSession.close();
    resourceAsStream.close();
    // 这里代码看不懂可以查看mybatis01的代码
    } // 插入数据
    @Test
    public void insert() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = build.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    NBAPlaers nba=new NBAPlaers();
    nba.setAddress("洛杉矶");
    nba.setBirthday(new Date());
    nba.setSex("男");
    nba.setUsername("裤子马");
    int insert = mapper.insert(nba);
    System.out.println(insert);
    //到这运行控制台会输入执行一行数据成功,但是但是但是这条数据并没有插入到数据库中。没有commit commit commit!!!!
    //Setting autocommit to false on JDBC Connection
    //要手动提交事物
    sqlSession.commit(); //其中sqlSession.rollback();为回滚
    //获取刚才插入数据的ID值,注意:需要在UserMapper.xml中配置文件
    Integer id = nba.getId();
    System.out.println("id:"+id);
    sqlSession.close();
    resourceAsStream.close(); }
    // 修改数据
    @Test
    public void update() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = build.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    NBAPlaers nba=new NBAPlaers();
    nba.setUsername("隆多");
    nba.setSex("男");
    nba.setBirthday(new Date());
    nba.setAddress("洛杉矶");
    nba.setId(7);
    int update = mapper.update(nba);
    //提交事物
    sqlSession.commit();
    System.out.println(update);
    sqlSession.close();
    resourceAsStream.close();
    }
    // 删除数据
    @Test
    public void delte() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = build.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    NBAPlaers nba=new NBAPlaers();
    int update = mapper.delete(7);
    //提交事物
    sqlSession.commit();
    System.out.println(update);
    sqlSession.close();
    resourceAsStream.close();
    }
    //模糊查询
    @Test
    public void findBilike() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = build.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    NBAPlaers nba=new NBAPlaers();
    nba.setUsername("%L%");
    List<NBAPlaers> bylike = mapper.findBylike(nba);
    for(NBAPlaers nba1:bylike)
    {
    System.out.println(nba1);
    }
    sqlSession.close();
    resourceAsStream.close();
    }
    //聚合函数的查询数据量
    @Test
    public void findcount() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = build.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int count = mapper.findcount();
    System.out.println(count);
    sqlSession.close();
    resourceAsStream.close();
    }
    }

分享之路,欢迎交流

05-03 22:26