mybatis是一个orm持久化框架,mybatis专注于sql的操作
从3.0开始名字改变了:ibatis-mybatis
 对象关系映射(Object Relational Mapping)

一、Mybatis搭建

1、导包

2、mybatis-config.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="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/crm"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers><!-- 映射文件  现在不要配 ,有映射文件需要配在这里  包名前面的不要-->
<mapper resource="com/zy/mapper/UserMapper.xml"/>
</mappers>
</configuration>

3、创建表

4、创建实体类

package com.zy.entity;

public class User {
private Integer uid;
private String username;
private String password;
private String address; public User() {
super();
// TODO Auto-generated constructor stub
} public User(Integer uid, String username, String password, String address) {
super();
this.uid = uid;
this.username = username;
this.password = password;
this.address = address;
} public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", address=" + address + "]";
} }

5、搭建映射文件

UserMapper.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">
<!--
namespace唯一表示此名字下的crud语句
-->
<mapper namespace="myuser"><!-- 无规律,起个代号就行,不要重复 -->
<!-- 提供了增删改查的相关标签 -->
<!-- 以后的sql都会写在这个配置文件中 -->
<!--<select id=""></select>
<insert id=""></insert>
<delete id=""></delete>
<update id=""></update> --> <!-- 查询 --> <!-- 如果结果是集合也填集合的泛型 -->
<!--
id:在此命名空间下唯一标识
resultType:查询结果的返回类型或者集合的泛型
-->
<select id="selectUser" resultType="com.zy.entity.User">
SELECT * FROM t_user
</select>
<delete id="deleteUser">
DELETE FROM t_user WHERE uid=1
</delete> <insert id="insertUseer">
INSERT INTO t_user VALUES(NULL,'bbbb','1234','德国')
</insert> <update id="updateUser">
UPDATE t_user SET username='武磊' WHERE uid=4
</update> <!-- 根据id查询用户 -->
<select id="selectUserByid" resultType="com.zy.entity.User">
SELECT * FROM t_user WHERE uid=#{id}<!-- 一个参数#{}占位符,里面写什么无所谓 -->
</select> <!-- 根据用户名和密码查询用户 -->
<select id="selectUserByNP" resultType="com.zy.entity.User">
SELECT * FROM t_user WHERE username=#{uu} AND password=#{pp}
</select> <!-- 特殊字符的转义 <![CDATA[]]> -->
<!-- xml把小于号当做标签 在sql语句中直接写小于号会报错 -->
<!-- The content of elements must consist of well-formed character data or markup. -->
<select id="selectUser007" resultType="com.zy.entity.User">
<![CDATA[ SELECT * FROM t_user WHERE uid<9 ]]>
</select> <!-- 多条件查询之对象传值 占位符要与对象属性保持一致,不然传不上去 -->
<insert id="insertUser007">
INSERT INTO t_user VALUES(NULL,#{username},#{password},#{address}) </insert>
</mapper>
<!-- 该实体类与表中列名有不一致的  使用as命别名解决 -->
<select id="uu" resultType="com.zy.entity.UU">
SELECT uid id,username name,password,address from t_user
</select>

6、在配置文件中引用映射文件

 <mapper resource="com/zy/mapper/UserMapper.xml"/>

7、得到会话

package com.zy.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map; 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 com.zy.entity.User; public class UserTest {
public static void main(String[] args) throws Exception {
//1读取配置文件得到会话工厂
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//2sql会话工厂创建者
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3生成sql会话工厂
SqlSessionFactory sf = sqlSessionFactoryBuilder.build(resourceAsStream);
//4得到mybatis和数据库会话对象
SqlSession session = sf.openSession(); //完成一个查询任务
/*// List<User> selectList = session.selectList("myuser.selectUser");
// for (User user : selectList) {
// System.out.println(user);
// } //完成一个删除任务(增删改需要提交事务commit)
// int delete = session.delete("myuser.deleteUser");
// session.commit();//相当于应用改变 //完成一个添加
// session.insert("myuser.insertUseer");
// session.commit(); //完成一个修改
// session.update("myuser.updateUser");
// session.commit(); //带一个参数的查询
// User uu = session.selectOne("myuser.selectUserByid",2);
// System.out.println(uu); //带两个参数的查询
//解决方案1把参数放对象中 2把参数放map中[map中的键需要与占位符一致] 灵活度更高
// Map<Object, Object> map = new HashMap();
// map.put("uu", "rose");
// map.put("pp", "654321");
//
// User uu = session.selectOne("myuser.selectUserByNP", map);
// System.out.println(uu); //调用带<号的
// List<User> selectList = session.selectList("myuser.selectUser007");
// for (User uu : selectList) {
// System.out.println(uu);
// }
*/
//用对象传递参数
session.insert("myuser.insertUser007",new User(null, "哈哈", "111111", "郑州"));
session.commit(); } }

8、使用mapper代理的方式

1).在实现的时候,查询字符串,需要namespace.sqlid,容易拼接出错,硬编码
2).参数是object类型,如果参数传入有问题,在编译的时候不报错
3).selectOne和seletList还需要判断

上述写法,有很多吐槽点,所以需要改成主流的方法

使用mapper代理的方式

package com.zy.mapper;

import java.util.List;

import com.zy.entity.User;

public interface UserMapper {
//UserMapper.java接口和UserMapper.xml配套使用----关系密切
//查询用户
public List<User> getList(); //根据id删除用户
public void deleteById(int id); }
UserMapper.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.zy.mapper.UserMapper">
<!-- 查询用户
1 namespace必须是接口全名称
2 id名必须和方法名一致
3 resultType和方法名的返回值保持一致,如果是集合和集合的泛型保持一致
4 接口和xml名字一致,放在同一包下
-->
<select id="getList" resultType="com.zy.entity.User">
SELECT * FROM t_user
</select> <delete id="deleteById">
DELETE FROM t_user WHERE uid=#{id}
</delete>
</mapper>
package com.zy.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List; 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 com.zy.entity.User;
import com.zy.mapper.UserMapper; public class Test { public static void main(String[] args) throws Exception {
//新形势下,使用mapper代理完成调用
//1读取配置文件得到会话工厂
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//2sql会话工厂创建者
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3生成sql会话工厂
SqlSessionFactory sf = sqlSessionFactoryBuilder.build(resourceAsStream);
//4得到mybatis和数据库会话对象
SqlSession session = sf.openSession();
//---------------------------
//旧的
//完成一个查询任务
// List<User> selectList = session.selectList("myuser.selectUser");
// for (User user : selectList) {
// System.out.println(user);
// }
//------------------------------------ //新的 //得到一个mapper代理
// UserMapper mapper = session.getMapper(UserMapper.class);//反射 UserMapper为接口
// //代理调用方法去查询
// List<User> list = mapper.getList();
// //遍历
// for (User user : list) {
// System.out.println(user);
//
// }
//------------------------ UserMapper mapper = session.getMapper(UserMapper.class);
mapper.deleteById(4);
session.commit();
} }

Mybatis学习笔记1的更多相关文章

  1. 【MyBatis学习笔记】

    [MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...

  2. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  3. MyBatis:学习笔记(3)——关联查询

    MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...

  4. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  5. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

  6. mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)

    下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...

  7. mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现

    项目结构  基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...

  8. Mybatis学习笔记二

    本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...

  9. Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)

    一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...

  10. mybatis学习笔记--常见的错误

    原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...

随机推荐

  1. MySQL审计audit

    导读: MySQL社区版是不带审计功能的,如果要使用MySQL审计,可以考虑使用中间件(例如proxysql)或者是MariaDB的审计插件.这里以MariaDB的审计插件为例,实现MySQL 5.7 ...

  2. ICPC Central Russia Regional Contest (CRRC 19)题解

    题目连接:https://codeforces.com/gym/102780 寒假第二次训练赛,(某菜依旧是4个小时后咕咕咕),战况还行,个人表现极差(高级演员) A:Green tea 暴力枚举即可 ...

  3. springboot源码解析-管中窥豹系列之aware(六)

    一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...

  4. LeetCode374 猜数字大小

    我们正在玩一个猜数字游戏. 游戏规则如下:我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字.每次你猜错了,我会告诉你这个数字是大了还是小了.你调用一个预先定义好的接口 guess(int n ...

  5. 大数相加Java

    题目 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回. 分析 两个字符串,定义两个指针,分别从这两个字符串的结尾开始遍历,因为可能字符串1比字符串2长度要长,因此只要两者其中有 ...

  6. requests+BeautifulSoup | 爬取电影天堂全站电影资源

    import requests import urllib.request as ur from bs4 import BeautifulSoup import csv import threadin ...

  7. redis持久化怎么选?成年人从来不做选择...

    前言 面试官:你知道 redis 是的怎么做持久化的吗? 我:我知道 redis 有两种方式,一种是 RDB,一种是 AOF. 面试官:那这两种方式具体是怎么做的,它们的区别是什么,生产环境中到底应该 ...

  8. 【DBA】非常好的一个脚本网站

    今天无意间发下了一个特别好的一个oracle脚本的网站.网站地址如下: https://oracle-base.com/dba/scripts 里面都是一些非常实用的脚本.

  9. C# 请求被中止: 未能创建 SSL/TLS 安全通道。 设置SecurityProtocol无效

    今天为了获取一张图片,用了一段代码: ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateV ...

  10. Java运算符及包机制

    Java中的运算符及包机制 算术运算符:+ - * / % ++ -- 赋值运算符:=,+=,-=,*=,/= 关系运算符:>,<,>=,<=,==,!=,instanceof ...