入门第二天

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

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

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

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

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

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

  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();
    }
    }

分享之路,欢迎交流

解析Mybatis入门第二天的更多相关文章

  1. 解析Mybatis入门第一天

    MyBatis是一个基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单. MyBatis通过XML或者注解的方式将要执行的各 ...

  2. MyBatis入门基础(一)

    一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...

  3. 【转载】 mybatis入门系列四之动态SQL

    mybatis 详解(五)------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when, ...

  4. Mybatis系列(一):Mybatis入门

    一.Mybatis是什么 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...

  5. Mybatis入门及Dao开发方式

    本节内容: Mybatis介绍 使用jdbc编程问题总结 Mybatis架构 Mybatis入门程序 Dao的开发方式 SqlMapConfig.xml文件说明 一.Mybatis介绍 MyBatis ...

  6. MyBatis入门基础

    转自http://www.cnblogs.com/selene/p/4604605.html 话不多说,先看看原始的JDBC程序代码,看看这样的代码存在什么样子的问题. package com.uti ...

  7. 写给新手看的 MyBatis 入门

    目录 MyBatis 使用前的准备 什么是 MyBatis 使用Maven 进行 MyBatis 开发环境搭建 MyBatis 入门 项目整体结构一览 MyBatis 的简单生命周期 1.获取 Sql ...

  8. mybatis入门案例自定义实现

    mybatis入门案例自定义实现 一.需要实现的类和接口 public static void main(String[] args) throws Exception{ //1.读取配置文件 Inp ...

  9. Mybatis入门(一)------基本概念操作

    Mybatis简介 Mybatis是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置 ...

随机推荐

  1. [BOI2009]Radio Transmission 无线传输

    题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入输出格式 输入格式: 第一行给出字符串的长度,1 < L ≤ 1, ...

  2. Neo4j Cypher查询语言详解

    Cypher介绍 "Cypher"是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询.Cypher还在继续发展和成熟,这也就意味着有可能会出现 ...

  3. 在SpringBoot 1.5.3上使用gradle引入hikariCP

    在SpringBoot 1.5.3上使用gradle引入hikariCP hikari来源于日语,是“光”的意思,号称“史上最快数据库连接池”,也是springboot2.0最新版默认的连接池.但是s ...

  4. 修改css样式+jq中的效果+属性操作+元素操作

    :checked    选框选中的 一.修改css样式: 1.参数只写属性名,则返回属性值 $(this).css( ' color ');   //300px 2.参数是属性名,属性值,逗号分隔,是 ...

  5. C#操作Word的+ CKEditor 輸出成Word文件(包含圖案上傳)

    C#操作Word 参考博文: C#操作word类文件 https://www.cnblogs.com/walking/p/3571068.html C#中的Office操作专栏(21) http:// ...

  6. libevent使用IOCP网络模型的示例

    这段时间抽空学习了一下强大的网络库libevent,其使用标准C语言编写,支持Windows.Linux.Mac等等主流操作系统,早期版本不支持Windows的IOCP,最新版本已经添加上了,在网上找 ...

  7. 修改ie版本为Edge

    <meta http-equiv="X-UA-Compatible" content="IE=Edge"> #以上代码告诉IE浏览器,IE8/9及以 ...

  8. NX二次开发-C++ CopyFile函数的用法

    NX9+VS2012 #include<Windows.h> CopyFile("D:\\test.prt","D:\\1\\test123.prt" ...

  9. git tag操作

    git tag //查看tag git tag v1.0.0 c809ddbf83939a89659e51dc2a5fe183af384233 //在某个commit 上打tag git push o ...

  10. iOS之NSArray数组排序

    一.数组遍历 除了常用的for和for-in遍历外,系统还提供了三种枚举遍历,对于大量的数据遍历可以使用下列三个方法. - (void)enumerateObjectsUsingBlock:(void ...