Mybatis学习笔记(3)--MyBatis的原始Dao开发模式

2024-06-14 18:32

本文主要是介绍Mybatis学习笔记(3)--MyBatis的原始Dao开发模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.User.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:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="user"><!-- id:statement的id 或者叫做sql的id --><!-- parameterType:声明输入参数的类型 --><!-- resultType:声明输出结果的类型,应该填写pojo的全路径 --><!-- #{}:输入参数的占位符,相当于jdbc的? --><select id="queryUserId" parameterType="int"resultType="com.skiff.www.domain.User">select * from user where id = #{id}</select><!-- 如果返回多个结果,mybatis会自动把返回的结果放在list容器中 --><!-- resultType的配置和返回一个结果的配置一样 --><select id="queryUserByUsername1" parameterType="string"resultType="com.skiff.www.domain.User">SELECT * FROM user WHERE username LIKE #{username}</select><!-- 如果传入的参数是简单数据类型,${}里面必须写value --><select id="queryUserByUsername2" parameterType="string"resultType="com.skiff.www.domain.User">SELECT * FROM `user` WHERE username LIKE '%${value}%'</select><!-- 插入语句中values中括号的字段和数据库中的表中的数据是一一对应的 而value后面的数据是实体的对象中对应的属性 --><!-- 保存用户 --><insert id="saveUser" parameterType="com.skiff.www.domain.User"><!-- selectKey 标签实现主键返回 --><!-- keyColumn:主键对应的表中的哪一列 --><!-- keyProperty:主键对应的pojo中的哪一个属性 --><!-- order:设置在执行insert语句前执行查询id的sql,在执行insert语句之后执行查询id的sql --><!-- resultType:设置返回的id的类型 --><selectKey keyColumn="id" keyProperty="id" order="AFTER"resultType="int">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO `user`(username,birthday,sex,address) VALUES(#{name},#{birthday},#{sex},#{address})</insert><!-- 更新用户 --><update id="updateUserById" parameterType="com.skiff.www.domain.User">UPDATE `user` SETusername = #{name},address = #{address},birthday = #{birthday} WHERE id = #{id}</update><!-- 删除用户 --><delete id="deleteUserById" parameterType="int">delete from user whereid=#{id}</delete></mapper>


2.sqlMapConfig.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><!-- 和spring整合后 environments配置将废除 --><environments default="development"><environment id="development"><!-- 使用jdbc事务管理 --><transactionManager type="JDBC" /><!-- 数据库连接池 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url"value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="123456" /></dataSource></environment></environments><mappers><mapper  resource="sqlmap/User.xml"/><mapper  resource="sqlmap/Order.xml"/></mappers> 
<!-- 	<mappers><package name="com.skiff.www.mapper"/></mappers> -->
</configuration>



3.dao接口:UserDao.java

/**     * @文件名称: UserDao.java   * @描述: TODO  * @作者:  一叶扁舟(skiff)* @时间:2018年1月9日 下午3:20:26  * @版本:V1.0     */ 
package com.skiff.www.dao;import com.skiff.www.domain.User;/**  * @类功能说明:    * @作者: 一叶扁舟 (skiff)* @创建时间:2018年1月9日 下午3:20:26  * @版本:V1.0  */
public interface UserDao {//通过用户ID查询一个用户public User selectUserById(Integer id);
}

4.dao实现类

/**     * @文件名称: UserDaoImpl.java   * @描述: TODO  * @作者:  一叶扁舟(skiff)* @时间:2018年1月9日 下午3:22:04  * @版本:V1.0     */ 
package com.skiff.www.dao.impl;import java.util.List;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;import com.skiff.www.dao.UserDao;
import com.skiff.www.domain.User;/**  * @类功能说明:    * @作者: 一叶扁舟 (skiff)* @创建时间:2018年1月9日 下午3:22:04  * @版本:V1.0  */
public class UserDaoImpl implements UserDao{//注入private SqlSessionFactory sqlSessionFactory;public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}//通过用户ID查询一个用户public User selectUserById(Integer id){SqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession.selectOne("queryUserId", id);}//通过用户名称模糊查询public List<User> selectUserByUsername(Integer id){SqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession.selectList("queryUserId", id);}
}



5.dao测试类

/**     * @文件名称: UserDaoTest.java   * @描述: TODO  * @作者:  一叶扁舟(skiff)* @时间:2018年1月9日 下午3:25:52  * @版本:V1.0     */ 
package test.com.skiff.www.testUser;import java.io.InputStream;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;import com.skiff.www.dao.UserDao;
import com.skiff.www.dao.impl.UserDaoImpl;
import com.skiff.www.domain.User;/**  * @类功能说明:    * @作者: 一叶扁舟 (skiff)* @创建时间:2018年1月9日 下午3:25:52  * @版本:V1.0  */
public class UserDaoTest {public SqlSessionFactory sqlSessionFactory;@Beforepublic void before() throws Exception {//加载核心配置文件String resource = "sqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);//创建SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(in);}@Testpublic void testDao() throws Exception {//注入session工厂UserDao userDao = new UserDaoImpl(sqlSessionFactory);//调用dao方法查询出结果User user = userDao.selectUserById(31);System.out.println(user);}
}




这篇关于Mybatis学习笔记(3)--MyBatis的原始Dao开发模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061185

相关文章

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

mybatis中resultMap的association及collectio的使用详解

《mybatis中resultMap的association及collectio的使用详解》MyBatis的resultMap定义数据库结果到Java对象的映射规则,包含id、type等属性,子元素需... 目录1.reusltmap的说明2.association的使用3.collection的使用4.总

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()