Mybatis学习笔记1
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的更多相关文章
- 【MyBatis学习笔记】
[MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- MyBatis:学习笔记(3)——关联查询
MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
- mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)
下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...
- mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现
项目结构 基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...
- Mybatis学习笔记二
本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...
- Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)
一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...
- mybatis学习笔记--常见的错误
原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...
随机推荐
- 并发编程--锁--Lock和Synchronized
说说对于 synchronized 关键字的了解? synchronized关键字解决的是多个线程之间访问资源的同步性: synchronized 关键字可以保证被它修饰的方法或者代码块在任意时刻只能 ...
- Java基础--接口回调(接口 对象名 = new 类名)理解
接口 对象名1 = new 类名和类名 对象名2 = new 类名的区别是什么? 实例 /** *Person.java 接口 */ public interface Person { void in ...
- netty服务端客户端启动流程分析
服务端启动流程 我们回顾前面讲解的netty启动流程,服务端这边有两个EventLoopGroup,一个专门用来处理连接,一个用来处理后续的io事件 服务端启动还是跟nio一样,绑定端口进行监听,我们 ...
- NOIP初赛篇——08计算机安全知识
引言 计算机安全中最重要的是存储数据的安全,其面临的主要威胁包括:计算机病毒.非法访问.计算机电磁辐射.硬件损坏等. 计算机病毒是附在计算机软件中的隐蔽小程序,它和计算机其他工作程序一样,但会 ...
- 【Problems】MySQL5.7 datetime 默认值设为‘0000-00-00 00:00:00'值出错
记录 MySQL5.7 datetime 默认值设为'0000-00-00 00:00:00'值出错 我的MySQL版本 mysql --version 5.7.28 C:\Users\x1c> ...
- iostat的输出
第一行显示的时子系统启动以来的平均值,接下来的报告显示了增量的平均值,每个设备一行 Device: rrqm/s wrqm/s r/s w/s rsec/s ...
- kubernets之pod的删除方式
一 删除单个pod 1 删除指定命名空间的指定名称的pod k delete po kubia-manual -n defaultpod "kubia-manual" delet ...
- mysqldumpslow基本使用
参数解释 -s, 是表示按照何种方式排序 c: 访问计数 l: 锁定时间 r: 返回记录 t: 查询时间 al:平均锁定时间 ar:平均返回记录数 at:平均查询时间 -t, 是top n的意思,即为 ...
- 微信小程序 发送模板消息的功能实现
背景 - 小程序开发的过程中,绝大多数会满足微信支付 - 那么,作为友好交互的体现,自然就会考虑到支付后的消息通知咯 - 所以,我的小程序项目也要求完成这个效果,so.分享一下自己的实现步骤,以方便道 ...
- 浅析Asp.Net Core框架IConfiguration配置
目录 一.建造者模式(Builder Pattern) 二.核心接口与配置存储本质 三.简易QueryString配置源实现 四.宿主配置与应用配置 一.建造者模式 为什么提建造者模式?在阅读.NET ...