mybatis实现简单的增删查改
接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的。这样学习起来,方向性也会更强一些。我对于mybatis的理解是,
它是一个封装了JDBC的java框架。所能实现的功能是对数据库进行增删查改的功能。
首先,需要搭建一个demo,用于学习这个框架的使用方式。
(1)在IDE上建立自己的工程目录,一个普通的java工程项目就好,我电脑本地的IDE是Myeclipse。
(2)引入搭建框架需要的jar包,这个直接去网上搜索就好。
(3)框架的核心实现都是基于配置的,引入jar包后,先配置mybatis的核心xml文件,我自己命名为mybatis.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments> </configuration>
environments 和 environment这两个标签,里面的属性值,我直接按照官方提供的API定义,重点是dataSource标签下面的子标签,四个property分别用于指定数据库连接驱动,数据库连接地址,用户名、密码。这些信息统一使用properties文件配置。properties文件的信息如下
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/crm
username = root
password =root
(4)上面的配置是一些全局配置,下一步需要建立一个实体,映射mysql数据库中的某张表,我这里的表名叫A。建立的实体类叫User
public class User {
private Integer id ;
private String name ;
private String age ;
private String score ;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
public String toString(){
return "id = " + id + " "
+"name = " + name + " "
+"age = " + age + " "
+"score = " + score + " ";
}
}
建立好实体类后,再去配置实体类对应的xml文件。配置像下面这样
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.IUserOperation"> <select id="getSingle" parameterType="int" resultType="com.domain.User">
select * from A where id = #{id}
</select>
<select id="ALL" parameterType="int" resultType="com.domain.User">
select * from A
</select> <delete id="deleteOne" parameterType="com.domain.User">
delete from A where id = #{id}
</delete> <select id="findByUserId" parameterType="int" resultType="com.domain.User">
select * from A where id = #{id}
</select> <insert id="addUser" parameterType="com.domain.User" useGeneratedKeys="false" keyProperty="id">
insert into A values (#{id},#{name},#{age},#{score})
</insert> <update id="updateUser" parameterType="com.domain.User" >
update A set name = #{name},age = #{age},score = #{score} where id = #{id}
</update> <delete id="deleteUser" parameterType="int">
delete from A where id = #{id}
</delete> </mapper>
这个配置里的namespace必须是唯一的,而且是你需要映射的实体类的绝对路径,我这边设计为基础接口的开发方式,所以映射到的是我的接口。接口里定义了相关的增添查改的方法,配置如下
interface IUserOperation{
User findByUserId(Integer id);
void addUser(User u );
void updateUser(User u);
void deleteUser(Integer id);
}
接口中的方法名,对应xml文件里的select、update、insert、delete标签下的id名字,必须完全相同,否则会报错。在对应的标签下,编写你想要实现的sql语句。其中的#{id}、#{name}这些是用于接收参数的。编写完后,就可以写测试类去测试啦。
public class MyBatisTest {
private static final String confPath = "mybatis.xml";
private static final String propertiesPath = "message.properties";
private static SqlSessionFactory ssf = null;
private static SqlSession session = null;
static{
InputStream in = MyBatisTest.class.getClassLoader().getResourceAsStream(confPath);
Properties pro = new Properties();
try {
pro.load(MyBatisTest.class.getClassLoader().getResourceAsStream(propertiesPath));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ssf = new SqlSessionFactoryBuilder().build(in,pro);
session = ssf.openSession();
}
/**
* 查询测试
*/
public static void testSelect(){
IUserOperation iUser = session.getMapper(IUserOperation.class);
User u = iUser.findByUserId(5);
System.out.println(u.toString());
session.close();
}
/**
* 删除测试
*/
public static void testDelete(){
IUserOperation iUser = session.getMapper(IUserOperation.class);
iUser.deleteUser(14);
session.commit();
session.close();
}
/**
* 修改数据
*/
public static void testUpdate(){
IUserOperation iUser = session.getMapper(IUserOperation.class);
User u = new User();
u.setId(3);
u.setName("TEST_COME");
u.setAge("87");
u.setScore("100");
iUser.updateUser(u);
session.commit();
session.close();
}
/**
* 数据添加
*/
public static void testAdd(){
IUserOperation iUser = session.getMapper(IUserOperation.class);
User u = new User();
u.setId(14);
u.setAge("33");
u.setName("liberation");
u.setScore("**");
iUser.addUser(u);
session.commit();
session.close();
}
public static void main(String[] args) {
//testAdd();
//testUpdate();
//testDelete();
testSelect();
}
}
官方API上建议,把session设置为局部变量,我这里偷懒,设为全局变量。
mybatis实现简单的增删查改的更多相关文章
- nodejs连接mysql并进行简单的增删查改
最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs ...
- Mybatis基础配置及增删查改操作
一.简介 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...
- Java连接MySQL数据库及简单的增删查改操作
主要摘自 https://www.cnblogs.com/town123/p/8336244.html https://www.runoob.com/java/java-mysql-connect.h ...
- myBatis 实现用户表增删查改操作<方法1 没有使用接口的>(最终版)
在UserMapper.xml中添加增删改查 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP ...
- myBatis 实现用户表增删查改操作<方法2 加入接口>(最终版)
这2种方法的区别:1.添加接口 2.运用接口来实现 其他的都一样 添加接口 //接口的名字和xml的名字一样,这样xml中的namespace就不用改 public interface UserMap ...
- SSM框架-MyBatis框架数据库的增删查改操作
话不多说,在User.xml文件中主要写一下操作数据库的sql语句,增,删,查,改是最常见的数据库操作 User.xml文件下:
- EF简单的增删查改
Add /// <summary> /// /// </summary> public void Add() { TestDBEntities2 testdb = new Te ...
- asp.net MVC最简单的增删查改!(详)
折腾了两天搞出来,但原理性的东西还不是很懂,废话不多说上图上代码 然后右键models,新建一个数据模型 注意我添加命名为lianxi 添加后如上 接下来在controllers添加控制器还有在Vie ...
- 一般处理程序+htm C#l简单的增删查改
首先引用两个文件一个dll: 数据库表已创建 首先编写数据读取部分 /// <summary> /// 查询 /// </summary> /// <param name ...
随机推荐
- UESTC - 900 方老师炸弹 —— 割点
题目链接:https://vjudge.net/problem/UESTC-900 方老师炸弹 Time Limit: 4000/2000MS (Java/Others) Memory L ...
- codeforces A. Fox and Box Accumulation 解题报告
题目链接:http://codeforces.com/problemset/problem/388/A 题目意思:有 n 个 boxes,每个box 有相同的 size 和 weight,但是stre ...
- amazon redshift 分析型数据库特点——本质还是列存储
Amazon Redshift 是一种快速且完全托管的 PB 级数据仓库,使您可以使用现有的商业智能工具经济高效地轻松分析您的所有数据.从最低 0.25 USD 每小时 (不承担任何义务) 直到每年每 ...
- codeforces 701B B. Cells Not Under Attack(水题)
题目链接: B. Cells Not Under Attack 题意: n*n的棋盘,现在放m个棋子,放一个棋子这一行和这一列就不会under attack了,每次放棋子回答有多少点还可能under ...
- python sorted函数的小练习
前两天学习了一下socket编程,在向某大神请教问题时被嫌弃了,有一种还没学会走就想跑的感觉.大神说我现在的水平应该去做一些像是操作文件.序列号等的小练习来加深理解.下面是他给我出的小练习: 1.da ...
- nltk: Tokenizing text into sentences
安装 nltk pip install nltk 下载nltk_data 方法一: 通过客户端下载 import nltk nltk.download() 出现如下客户端,选择所需的包下载.(但由于网 ...
- HihoCoder 1488 : 排队接水(莫队+树状数组)
描述 有n个小朋友需要接水,其中第i个小朋友接水需要ai分钟. 由于水龙头有限,小Hi需要知道如果为第l个到第r个小朋友分配一个水龙头,如何安排他们的接水顺序才能使得他们等待加接水的时间总和最小. 小 ...
- Rsyslog 日志相关内容
[root@server vusers_home]# rpm -ql rsyslog|more ###.so结尾为模块,模块有分im为输入模块,om 为输出模块/etc/logrotate ...
- 洛谷 1072 Hankson 的趣味题——质因数界限讨论
题目:https://www.luogu.org/problemnew/show/P1072 思路是把每个数质因数分解,答案对于每个质因数的次数有选择的区间,通过这个计算. 指数的限制就是上限是b1, ...
- calicoctl命令简介
背景 在calico中,有多种网络资源.以v1.6.1为例,网络资源包含:node,bgpPeer,hostEndpoint,workloadEndpoint,ipPool,policy,profil ...