入门第二天

目的:使用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. 使ie6/7/8支持css3的方法

    使用PIE.htc让IE6\7\8支持CSS3部分属性 包括圆角,阴影,背景渐变等效果 下载地址 http://css3pie.com/download/ 需要注意几点的是 第一,pie是以相对页面h ...

  2. 解析TextView中的URL等指定特殊字符串与点击事件

    使用TextView时,有时可能需要给予TextView里的特定字符串,比如URL,数字特别的样式,必希望能够添加点击事件.比如发短信时,文字里的url就可以点击直接打开浏览器,数字可以点击拨打电话. ...

  3. dubbo源码学习(四):暴露服务的过程

    dubbo采用的nio异步的通信,通信协议默认为 netty,当然也可以选择 mina,grizzy.在服务端(provider)在启动时主要是开启netty监听,在zookeeper上注册服务节点, ...

  4. android webview 输入法键盘遮挡输入框的问题

    新建一个工具类: /** * 解决webView键盘遮挡问题的类 * Created by zqy on 2016/11/14. */ public class KeyBoardListener { ...

  5. lterator遍历

    iterator是一种接口机制,为各种不同的数据结构提供统一的访问机制 作用: 1.为各种数据结构,提供一个统一的.简便的访问接口: 2.使得数据结构的成员能够按某种次序排列 3.ES6创造了一种新的 ...

  6. js数据访问的艺术

    数据访问js无时不刻所要做的事情,提高对数据的访问效率对一般的小的程序来说,对性能并不会有明显的改善.但是对像淘宝这样项目巨大,访问量巨大的网站来说,一个数据访问效率的提高对性能来说可能产生很大提升. ...

  7. 【集合!】 20140416 && 20140417集训 总结

    mobius的奇怪演绎 当我第一眼看见题目中出现mobius的时候,我唯一想到的就是某科学家对于n维空间的阐述与思考,同时还提出了一个mobius环.而这道题中的环就是mobius环咯.不过其实这是一 ...

  8. NX二次开发-UFUN创建B面UF_MODL_create_bsurf

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> //创建一个B面 ;//U方向极数 ;//V方向极数 ;//U方向规则 ;//V ...

  9. Codeforces703D-Mishka and Interesting sum-离线树状数组

    (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:传送门  原题目描述在最下面.  询问一个区间内出现次数为偶数次的数字的异或和. 思路:  先求出区间异或前缀和,其实就是出现次 ...

  10. 接口(Interfaces)与反射(reflection) 如何利用字符串驱动不同的事件 动态地导入函数、模块

    标准库内部如何实现接口的 package main import ( "fmt" "io" "net/http" "os" ...