MyBatis02:CRUD操作和配置解析

CRUD

select

根据id查询用户

  1. 接口方法
public interface UserMapper {//查询所有用户List<User> selectUser();}
  1. sql映射文件
<select id="selectUserById" parameterType="integer" resultType="com.wgg.pojo.User">select * from user where id=#{id}
</select>
  1. 测试
@Test
public void testSelectUserById() {SqlSession session = MybatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);User user = mapper.selectUserById(2);System.out.println(user);session.close();
}

根据密码和名字查询用户

  1. 接口方法
//通过密码和名字查询用户
User selectUserByNP(@Param("username") String username, @Param("pwd") String pwd);
  1. sql映射文件
<select id="selectUserByNP" resultType="com.wgg.pojo.User">select * from user where name=#{username} and pwd=#{pwd}
</select>
  1. 测试
@Test
public void testSelectUserByNP() {SqlSession session = MybatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);User user = mapper.selectUserByNP("张三", "abcdef");System.out.println(user);session.close();
}

使用万能Map

  1. 接口方法
 //通过密码和名字查询用户,通过Map传递参数
User selectUserByNP2(Map<String,Object> map);
  1. sql映射文件
<select id="selectUserByNP2" parameterType="map" resultType="com.wgg.pojo.User">select * from user where name=#{username} and pwd=#{pwd}
</select>
  1. 测试
@Test
public void testSelectUserByNP2() {SqlSession session = MybatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);Map<String, Object> map = new HashMap<String, Object>();map.put("username","小明");map.put("pwd","123456");User user = mapper.selectUserByNP2(map);System.out.println(user);session.close();
}

insert

添加一个用户

  1. 接口方法
//添加一个用户
int addUser(User user);
  1. sql映射文件
<insert id="addUser" parameterType="com.wgg.pojo.User">insert into user(id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
  1. 测试
@Test
public void testAddUser() {SqlSession session = MybatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);int i=mapper.addUser(new User(5,"王五","wangwu"));System.out.println(i);session.commit();//提交事务,重点!不写的话不会提交到数据库session.close();
}

update

修改用户信息

  1. 接口方法
//修改一个用户
int updateUser(User user);
  1. sql映射文件
<update id="updateUser" parameterType="com.wgg.pojo.User">update user set name=#{name},pwd=#{pwd} where id=#{id}
</update>
  1. 测试
@Test
public void testUpdateUser() {SqlSession session = MybatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);User user = mapper.selectUserById(1);user.setPwd("xiaoming");int i=mapper.updateUser(user);System.out.println(i);session.commit();//提交事务,重点!不写的话不会提交到数据库session.close();
}

delete

根据id删除一个用户

  1. 接口方法
//根据id删除用户
int deleteUser(int id);
  1. sql映射文件
<delete id="deleteUser" parameterType="integer">delete from user where id=#{id}
</delete>
  1. 测试
@Test
public void testDeleteUser() {SqlSession session = MybatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);int i=mapper.deleteUser(5);System.out.println(i);session.commit();//提交事务,重点!不写的话不会提交到数据库session.close();
}

小结:

  1. 直接取@Param中设置的值即可,不需要单独设置参数类型
  2. 参数过多,我们可以考虑直接使用Map实现
  3. 增、删、改操作需要提交事务!

like

模糊查询

在java代码中添加通配符
  1. 接口方法
//模糊查询
List<User> selectLike(@Param("str") String str);
  1. sql映射文件
<select id="selectLike" resultType="com.wgg.pojo.User">select * from user where name like #{str}
</select>
  1. 测试
@Test
public void testSelectLike(){SqlSession session = MybatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);String firstName="%张%";List<User> users = mapper.selectLike(firstName);for (User user : users) {System.out.println(user);}session.close();}
在sql语句拼接中添加通配符,会引起sql注入
  1. 接口方法
//模糊查询
List<User> selectLike(@Param("str") String str);
  1. sql映射文件
<select id="selectLike" resultType="com.wgg.pojo.User">select * from user where name like "%"#{str}"%"
</select>
  1. 测试
 @Testpublic void testSelectLike(){SqlSession session = MybatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);String firstName="张";List<User> users = mapper.selectLike(firstName);for (User user : users) {System.out.println(user);}session.close();}

配置解析mybatis-config.xml

<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/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/wgg/dao/UserMapper.xml"/></mappers></configuration>

environments元素

配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,用default指定

<environments default="development"><environment id="development">
子元素节点environment

dataSource

使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源,三种类型

  1. 实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
<dataSource type="POOLED">
  1. 每次被请求时打开和关闭连接
<dataSource type="UNPOOLED">
  1. 为了能在如 Spring 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
<dataSource type="JNDI">

子元素节点transactionManager

事务管理器,不需要设置属性

<transactionManager type="JDBC"/>
<transactionManager type="MANAGED"/>

mappers

定义SQL语句文件,告诉 MyBatis 到哪里去找到这些语句

    <mappers><mapper resource="com/wgg/dao/UserMapper.xml"/></mappers>
引入资源的方法
  1. 使用相对于类路径的资源引用
<mappers><mapper resource="com/wgg/dao/UserMapper.xml"/>
</mappers>
  1. 使用完全限定资源定位符(URL)
<mappers><mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
  1. 使用映射器接口实现类的完全限定类名

    需要配置文件名称和接口名称一致,并且位于同一目录

    <mappers><mapper class="com.wgg.dao.UserMapper"/></mappers>
  1. 将包内的映射器接口实现全部注册为映射器

    但是需要配置文件名称和接口名称一致,并且位于同一目录

    <mappers><package name="com.wgg.dao"/>
    </mappers>
    

UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wgg.dao.UserMapper"><select id="selectUser" resultType="com.wgg.pojo.User">select * from user</select>
</mapper>
namespace:命名空间
  • namespace的命名必须跟某个接口同名
  • 接口中的方法与映射文件中sql语句id应该一一对应
    1. namespace和子元素的id联合保证唯一 , 区别不同的mapper
    2. 绑定DAO接口

使用properties优化数据源

resource目录下新建database.properties

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

mybatis-config.xml配置文件中加入properties

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--导入properties文件--><properties resource="database.properties"/><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><mappers><package name="com.wgg.dao"/></mappers></configuration>

给Java类型起别名,typeAliases

在mybatis-config.xml中添加,这样就不用指定全类名了

<!--配置别名,注意顺序-->
<typeAliases><typeAlias type="com.wgg.pojo.User" alias="User"/>
</typeAliases>

也可以指定包名,默认就使用小写user作为别名

<typeAliases><package name="com.wgg.pojo"/>
</typeAliases>

使用注解

@Alias("user")
public class User {}

设置

  1. 懒加载
  2. 日志实现
  3. 缓存开启关闭

等等

<settings><setting name="lazyLoadingEnabled" value="true"/><setting name="logImpl" value="LOG4J"/><setting name="cacheEnabled" value="true"/>

作用域(Scope)和生命周期

mybatis执行流程

作用域
  • SqlSessionFactoryBuilder:用于创建SqlSessionFactory,方法作用域。

  • SqlSessionFactory:相当于一个数据库连接池,用于创建Sqlsession接口对象,生命周期存在于整个mybatis应用中,作为一个单例(太多数据库连接池资源消耗),应用作用域。

  • SqlSession :相当于一个数据库连接connection,执行多条语句,存活在一个业务请求中,finnally中保证关闭,请求或方法作用域。

MyBatis02:CRUD操作和配置解析相关推荐

  1. 二、CRUD操作以及配置解析

    二.CRUD操作以及配置解析 1.在原来基础上加上增加.删除和更改 在UserDao的接口中 /*** 根据id查询用户*/User getUserById(int id);/*** 增加一个用户*/ ...

  2. 使用mybatis完成简单的crud操作

    目录 1.配置核心配置文件和jdbc.properties 2. 装mybatis工具类 3.创建实体类 4.创建mapper接口 5.编写测试类 下面介绍基于注解的方式实现基本的 CRUD 操作 1 ...

  3. MyBatis02:CRUD 操作

    本文为 SSM 框架系列之 MyBatis 第二部分:增删改查操作 其它内容的链接如下: [1]MyBatis01:初识 MyBatis 与 第一个 MyBaits 程序 [2]MyBatis02:C ...

  4. jaxp 解析xml 小demo 对xml文件标签实现增删改查crud操作

    <?xml version="1.0" encoding="utf-8" standalone="no"?><school ...

  5. 用“XML解析开发包Jaxp”对XML文件进行Dom方式的CRUD操作

    IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结! package edu.jaxp; import java.io.FileNotFoundException; import j ...

  6. Elasticsearch技术解析与实战(二)文档的CRUD操作

    启动Elasticsearch和kibana 访问Elasticsearch:http://localhost:9200/?pretty 访问kibana:http://localhost:5601 ...

  7. mybatis mysql crud_Mybatis实现CRUD操作

    Mybatis实现CRUD操作 导入相关依赖 创建实体类User 创建Mybatis主配置文件:SqlMapConfig.xml 创建IUserDao接口. 创建于接口对应的映射配置文件:IUserD ...

  8. java crud_Java 8流中的数据库CRUD操作

    java crud 在开始使用新工具时要克服的最大障碍是让您着手处理小事情. 到目前为止,您可能对新的Java 8 Stream API的工作方式充满信心,但是您可能尚未将其用于数据库查询. 为了帮助 ...

  9. Java 8流中的数据库CRUD操作

    在开始使用新工具时要克服的最大障碍是让您着手处理小事情. 到目前为止,您可能对新的Java 8 Stream API的工作方式充满信心,但是您可能尚未将其用于数据库查询. 为了帮助您开始使用Strea ...

最新文章

  1. Swift 中使用 SQLite——打开数据库
  2. 如何系统地入门学习stm32?
  3. 自由自在公司进口食品呈现高端消费的趋势
  4. NYOJ 100 1的个数
  5. C运行库和C语言函数库/Microsoft C运行库
  6. React学习小结(二)
  7. Spring 框架基础(01):核心组件总结,基础环境搭建
  8. 使用Visual Studio比较两个数据库、查找差异和更新
  9. Linux学习总结(54)——Red Hat Enterprise Linux与CentOS的区别
  10. [JavaWeb基础] 012.Struts2 自定义标签使用
  11. Nginx+Tomcat搭建高性能负载均衡集群
  12. windows 快捷方式(.lnk)代码执行漏洞(CVE-2017-8464 )[附EXP生成工具]
  13. 【中医学】8 中药-1
  14. 如何从macOS Catalina向iPhone添加自定义铃声
  15. for 循环打印直角三角形、正三角形、棱形
  16. python知道三角形三边求面积(海伦公式)
  17. 怎样用网址查询微信公众号的二维码
  18. Professional SharePoint 2007 Web Content Management Development: Building Publishing Sites with Offi
  19. 【Matlab】Matlab基础入门
  20. 分享马化腾在3Q大战后写给腾讯全体员工的一封信

热门文章

  1. 浅谈BCrypt密码加解密的使用
  2. Vijos 1836题:HYS与七夕节大作战
  3. 自己动手丰衣足食之图片放大镜
  4. C语言在控制台上实现鼠标操作的方法
  5. ubuntu大于4T分区 12T硬盘分区
  6. Docker 安装常用软件(超全、超实用)
  7. 少儿Python编程6-计算机数据结构和算法
  8. oracle表扬信,2019年商务英语高级写作范文:感谢与道歉函
  9. php汉字转拼音百家姓版,Excel 将中文名改成拼音,并将姓氏放后面
  10. Android P OTA增量升级