1、db.properties

原因:数据库的连接直接写到配置(mybati-config.xml)里存在安全隐患

解决:将配置的信息放到一个文件中管理

右键resources --> File --> 填“db.properties”

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=123

到配置中进行引入(properties标签)和使用(${}

mybati-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> <!-- 配置标签 -->
<!-- 导入db.properties文件 , 使用 ${} 引入-->
<properties resource="db.properties"/> <environments default="development"> <!-- 总环境 默认:development -->
<environment id="development"> <!-- 环境 名为:development -->
<transactionManager type="JDBC"/> <!-- 事务管理器 类型:JDBC (事务:确保操作完整性,要么成功要么失败)-->
<dataSource type="POOLED"> <!-- 数据源 类型:POOLED-->
<property name="driver" value="${driver}"/> <!--属性 名:驱动 值:..mysql(使用的何种数据库).. -->
<!-- 属性 名:url 值:数据连接地址+规则(如:字符集:UTF-8) -->
<property name="url" value="${url}"/>
<property name="username" value="${username}"/> <!-- 属性 名:数据库用户名 值:root-->
<property name="password" value="${password}"/> <!--属性 名:密码 值:123 -->
</dataSource>
</environment>
</environments>
<mappers> <!--映射器 -->
<mapper resource="com/dao/userMapper.xml"/> <!-- 映射 资源:userMapper.xml -->
</mappers>
</configuration>

2、别名(typeAliases)

原因:为了减少代码的冗余

例如:在userMapping中会常常用到:com.pojo.User,可以进行别名设置。

解决:设置别名,用别名代替全名,减少代码冗余

mybatis-config.xml -->configuration(代码最好放到该标签下的第一位)

    <!--配置别名,注意顺序:最好能放到configuration标签下的第一位。-->
<typeAliases>
<typeAlias type="com.pojo.User" alias="User"/> <!--设置com.pojo.User 别名为:User-->
</typeAliases>

指定包进行别名设置(一般都是使用这个方法)

mybatis-config.xml -->configuration(代码最好放到该标签下的第一位)

<typeAliases>
<package name="com.pojo"/> <!--在该包下所有文件设别名为:文件名-->
</typeAliases>

验证效果:

com/dao/userMapper.xml 为设别名前(com.pojo.User)的代码

<select id="selectUser" resultType="com.pojo.User">

设置了别名后(使用别名:User)的代码,减少了代码冗余

<select id="selectUser" resultType="User">

3、mybatis.config.xml中settings标签

使用settings标签实现

  • 懒加载
  • 日志实现
  • 缓存开启关闭

默认的settings如下,通过修改里面的设置(setting)实现相应的功能。

mybatis-config.xml

<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

问题:如果在 configuration标签 上出现红色波浪线

鼠标移到该标签出现:The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".

解决:因为位置错误,settings标签要放在properties标签后面。

4、查询示例

1、示范:查询功能

1、设置接口

userMapper (接口)

package com.dao;

import com.pojo.User;

import java.util.List;

public interface userMapper {
//查询全部用户
List<User> selectUser();
//根据id查询用户
User selectUserById(int id);
}

2、在userMapper.xml设置SQL语句

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.dao.userMapper"> <!-- 映射器 命名空间:映射到那个类的地址 -->
<select id="selectUser" resultType="User"> <!-- 查询 名:selectUser 结果类型:com.pojo.User -->
select * from user
</select> <select id="selectUserById" resultType="User">
select * from user where id = #{id}
</select>
</mapper>

3、测试

MyTest.java

import com.dao.userMapper;
import com.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import utils.MybatisUtils; import java.util.List; public class MyTest {
@Test
public void selectUser() {
SqlSession session = MybatisUtils.getSession();
userMapper mapper = session.getMapper(userMapper.class); User user = mapper.selectUserById(1);
System.out.println("通过Id查询:"+user); System.out.println("查询所有:");
List<User> userAll = mapper.selectUser();
for (User user1 : userAll) {
System.out.println(user1);
} session.close();
}
}

5、crud实例

com/dao/userMapper (接口)

package com.dao;

import com.pojo.User;

import java.util.List;

public interface userMapper {
//查询全部用户
List<User> selectUser();
//根据id查询用户
User selectUserById(int id);
//添加一个用户
int addUser(User user);
//修改一个用户
int updateUser(User user);
//根据id删除用户
int deleteUser(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.dao.userMapper"> <!-- 映射器 命名空间:映射到那个类的地址 -->
<select id="selectUser" resultType="User"> <!-- 查询 名:selectUser 结果类型:com.pojo.User -->
select * from user
</select> <select id="selectUserById" resultType="User">
select * from user where id = #{id}
</select> <insert id="addUser" parameterType="User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert> <update id="updateUser" parameterType="User">
update user set name=#{name},pwd=#{pwd} where id = #{id}
</update> <delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>

MyTest.java

import com.dao.userMapper;
import com.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import utils.MybatisUtils; public class MyTest {
@Test
public void selectUser() {
SqlSession session = MybatisUtils.getSession();
userMapper mapper = session.getMapper(userMapper.class); /*通过id查询*/
/* User user = mapper.selectUserById(1);
System.out.println("通过Id查询:"+user);*/ /*查询所有用户*/
/* System.out.println("查询所有:");
List<User> userAll = mapper.selectUser();
for (User user1 : userAll) {
System.out.println(user1);
}*/ /*增加用户*/
/* User user = new User(6,"赵六","chaoliu"); // 到实体类User中设置:有参构造
int i = mapper.addUser(user);
System.out.println(i); // 输出为1,时表示增加一个用户成功
session.commit(); // 提交事务,没有的话交不到数据库*/ /*根据删除*/
/* int i = mapper.deleteUser(6);
System.out.println(i); // 输出为1,表示删除一个用户成功
session.commit(); //提交事务,重点!不写的话不会提交到数据库*/ /*修改*/
User user = mapper.selectUserById(1);
user.setPwd("newPassword");
int i = mapper.updateUser(user);
System.out.println(i);
session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close();
}
}

mybatis crud 学习总结02的更多相关文章

  1. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  2. Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】

    一.使用Mybatis对表进行CRUD操作------基于XML的实现 1.定义SQL的映射文件 2.在conf.xml中进行注册. 2.创建测试类 [具体过程参考:Mybatis的学习总结一] 二. ...

  3. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第二天】

    淘淘商城(SpringMVC+Spring+Mybatis)  是传智播客在2015年9月份录制的,几年过去了.由于视频里课上老师敲的代码和项目笔记有些细节上存在出入,只有根据日志报错信息作出适当的调 ...

  4. Redis:学习笔记-02

    Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...

  5. Mybatis架构学习

    Mybatis架构学习 MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架.MyBatis 封装了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.可以对配置和原生Map使用 ...

  6. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  7. MyBatis入门学习(二)

    在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...

  8. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...

  9. Spring+SpringMVC+MyBatis深入学习及搭建(三)——MyBatis全局配置文件解析

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6874672.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(二)——My ...

随机推荐

  1. 清除git中缓存的凭证(用户名及密码)

    今天刚接触Git,还有Gitstack,然后在克隆Gitstack服务器上的仓库时出现了一直用户身份识别失败问题,找了一些大佬的文章才知道原因在于密码输入错误过多.那么如何重新输入呢? 需要清空本地的 ...

  2. hitTest练习

    业务逻辑1:         底部一个按钮, 按钮的上面有一个View,遮挡在按钮的上面.         点击View时, View接收事件,当发现点击的点在按钮的位置时, 让底部的按钮处理事件. ...

  3. Java线程--Exchanger使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11868576.html Java线程--Exchanger使用: Exchanger 是用来交 ...

  4. matlab构建栅格地图绘图思路

    matlab构建栅格地图绘图思路 近来因研究需要,调研并思考了栅格地图的生成方法,暂时总结以备不时之需. 栅格的建立最需要注意栅格粒度的问题,即根据需要调整栅格的边长,目前有两种思路一种是固定栅格边长 ...

  5. HTTPStatus(状态码返回)详情

    1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101 (切 ...

  6. 简单模拟Java中反射的应用场景

    有人说Java是一门静态语言.那么何为静态语言,动态语言又是什么? 1.动态语言 是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以 被引进,已有的函数可以被删除或是其他结构上的变化 ...

  7. Java中eq、ne、ge、gt、le、lt的含义

    Java中eq.ne.ge.gt.le.lt 关系运算符包括EQ.NE.GE.GT.LE.LT几个,关系运算符返回的是真"True"或假"False". eq( ...

  8. 解决OpenOCD烧录STM32失败, 无法通过SWD连接的问题

    OpenOCD烧录STM32失败的问题 Linux下使用 OpenOCD 烧录 STM32, 出现了 Error: init mode failed (unable to connect to the ...

  9. SpringBoot自动配置的魔法

    Spring自动配置 从@SpringBootApplication注解说起 SpringBoot会根据类路径下的类自动配置,省去了编写繁琐的xml配置文件.原本基于xml配置bean的方式编程基于J ...

  10. 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存

    很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录:一.通过Dapr实现 ...