解析Mybatis入门第二天
入门第二天
目的:使用Mybatis对数据库中的数据进行简单的操作。例如:增、删、改、查、
前言:同样是使用idea创建一个普通的maven工程(如何创建一个普通的Maven工程可以参考入门第一天的详解)。
第一天:https://www.cnblogs.com/LBJLAKERS/p/11324234.html
数据库中的表仍然使用第一天的数据库表(新建表和添加数据的sql语句见第一天的分析)。
代码来了。。。。。。。。。。。。。。
首先看一下所有的文件的路径和结构
- 在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> - 添加一个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;
}
} 新建一个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();
}- 写一个jdbc.properties的属性文件,用来编写连接数据库的配置
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/javaDemo?characterEncoding=utf8
username=root
password=root - 配置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> - 编写相对应的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> - 最后。。。。对相应的功能进行测试
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入门第二天的更多相关文章
- 解析Mybatis入门第一天
MyBatis是一个基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单. MyBatis通过XML或者注解的方式将要执行的各 ...
- MyBatis入门基础(一)
一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...
- 【转载】 mybatis入门系列四之动态SQL
mybatis 详解(五)------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when, ...
- Mybatis系列(一):Mybatis入门
一.Mybatis是什么 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...
- Mybatis入门及Dao开发方式
本节内容: Mybatis介绍 使用jdbc编程问题总结 Mybatis架构 Mybatis入门程序 Dao的开发方式 SqlMapConfig.xml文件说明 一.Mybatis介绍 MyBatis ...
- MyBatis入门基础
转自http://www.cnblogs.com/selene/p/4604605.html 话不多说,先看看原始的JDBC程序代码,看看这样的代码存在什么样子的问题. package com.uti ...
- 写给新手看的 MyBatis 入门
目录 MyBatis 使用前的准备 什么是 MyBatis 使用Maven 进行 MyBatis 开发环境搭建 MyBatis 入门 项目整体结构一览 MyBatis 的简单生命周期 1.获取 Sql ...
- mybatis入门案例自定义实现
mybatis入门案例自定义实现 一.需要实现的类和接口 public static void main(String[] args) throws Exception{ //1.读取配置文件 Inp ...
- Mybatis入门(一)------基本概念操作
Mybatis简介 Mybatis是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置 ...
随机推荐
- 前端 Java Python等资源合集大放送
如果需要学习视频,欢迎关注[JAVA乐园]微信公众号,回复[领取资源]菜单一键领取以下所有200G干货资源,获取更多有用技术干货.文档资料.所有文档会持续更新,欢迎关注一起成长! 1.vue全套 Vu ...
- html清除页面缓存
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" ...
- pip3 常用操作
清华大学pip镜像 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ # 设置为默认 pip install pip -U pip config set ...
- Redis探索之路(一):Redis简介
一:NOSQL NotOnlySQL 反SQL运动,非关系型数据库(区别于Mysql关系型书库). 随着Web2.0兴起,“高性能”,“高并发”成为主流. NoSQL以key-value形式存储数据, ...
- 七牛云-C#SDK-上传-前期准备
1.创建一个asp.net core MVC 程序(这里随便) 这是一个空的程序 2.创建UploadController 3.添加引用 Install-Package Newtonsoft.Json ...
- 【JZOJ6403】a
description analysis 考虑\((0,0,0)\)走到某个点\((i,j,k)\)的贡献,相当于插板问题 \(i+j\)个空插\(k\)个板可以有空,\(i\)个空插\(j\)个板可 ...
- 移动端图片轮播效果:depth模式总结
最近公司app改版首页增加了一处轮播图效果,但是跟普通的轮播效果不同,是类似于下图的样式,找了一些兼容移动端的插件以及jQuery源码,总结一下使用心得: 1:jquery源码:缺点是在手机端的滑动很 ...
- APIO 2007 风铃
题目描述 你准备给弟弟 Ike 买一件礼物,但是,Ike 挑选礼物的方式很特别:他只喜欢那些能被他排成有序形状的东西. 你准备给 Ike 买一个风铃.风铃是一种多层的装饰品,一般挂在天花板上. 每个风 ...
- springcloud分布式事务TXLCN
新增一个model,pom文件引入依赖 <dependency> <groupId>org.springframework.boot</groupId> ...
- NX二次开发-NXOPEN获取所有工程图和所有视图DrawingSheet,DrawingSheetCollection,DraftingView
NX11+VS2013 #include <NXOpen/Part.hxx> #include <NXOpen/PartCollection.hxx> #include < ...