入门第二天

目的:使用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. 牛客网多校训练第九场H Cutting Bamboos

    题目链接:https://ac.nowcoder.com/acm/contest/889/H 题意:给出n颗竹子的高度,q次询问,每次询问给出l,r,x,y,每次选取[l,r]中的竹子,砍y次砍掉所有 ...

  2. hadoop备战:hbase的分布式安装经验

    配置HBase时,首先考虑的肯定是Hbase版本号与你所装的hadoop版本号是否匹配.这一点我在之前 的博客中已经说明清楚,hadoop版本号与hbase版本号的匹配度,那是官方提供的.以下的实验就 ...

  3. 如何在vue-cli 中适当的配置,来满足自己项目需求 ?

    1. 改变index.js 中端口号host host:'localhost' 改为 host: '0.0.0.0' 然后换成自己的ip 访问: 2. 在vue 中运行cnpm run start 中 ...

  4. 【转】移动前端开发之viewport的深入理解

    原文链接:https://blog.csdn.net/u012402190/article/details/70172371 笔记 (20180919,目前暂且只看一部分)

  5. 按钮与js事件先后顺序

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. 记一次为解决Python读取PDF文件的Shell操作

    目录 一.背景 二.问题 三.解决 四.一顿分析及 Shell 操作 五.后续 一.背景 本想将 PDF 文件转换为 Word 文档,然后网上搜索了一下发现有挺多转换的软件.有的是免费的.收费,咱也不 ...

  7. 依赖背包变形——poj1947(经典)

    /*这题显然不适用依赖背包的优化,因为不能保证根是必选的,但是可以按照常规依赖背包的思路进行转移,即每次对一个儿子进行C^2的转移 还是树形的背包,dp[u][j]表示u的子树里,切割出一个大小为j的 ...

  8. luoguP3951 小凯的疑惑/P2662 牛场围栏

    其实就是当年sxy给我讲的墨墨的等式,只是当时比较菜听得似懂非懂. 小凯的疑惑 去年noipday1t1,当时随便猜了个结论结果猜对了,现在瞎证一下,答案是a*b-a-b. 设a为a,b中较小的一个, ...

  9. linux centos 安装配置varnish

    安装2.0+版本 前期准备: 下载pcre http://sourceforge.net/projects/pcre/files/pcre/ http://optimate.dl.sourceforg ...

  10. ASP.NET MVC Controller激活系统详解2

    一.引言 此篇博文紧接上篇博文进行阐述,本篇博文阐述的主题是Controller激活和url路由 二.总述 ASP.NET路由系统是HTTP请求抵达服务端的第一道屏障,它根据注册的路由规则对拦截的请求 ...