利用Mybatis写第一个数据库操作的程序
文章目录
- mybatis下载
- 业务需求
- 环境搭建
- 加入配置文件
- 创建pojo
- sql映射文件
- 加载映射文件
- 实现根据id查询用户
- 测试程序:
- 效果
mybatis下载
mybaits的代码由github.com管理
下载地址:https://github.com/mybatis/mybatis-3/releases
下载的mybatis文件如下:
文件夹解释:
mybatis-3.2.7.jar mybatis的核心包
lib文件夹 mybatis的依赖包所在
mybatis-3.2.7.pdf mybatis使用手册
业务需求
使用MyBatis实现以下功能:
根据用户id查询一个用户
根据用户名称模糊查询用户列表
添加用户
更新用户
删除用户
环境搭建
如下图使用之前创建的mybatis-first工程以及jar包:核心包、依赖包、数据驱动包.
mybatis依赖包:
加载驱动包:
加入配置文件
新建一个Config文件夹用来存储配置文件。
日志打印:mybatis 默认使用log4j作为输出日志信息
log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
SqlMapConfig.xml
SqlMapConfig.xml是mybatis核心配置文件,配置文件内容为数据源、事务管理。
<?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="root" /></dataSource></environment></environments>
</configuration>
创建pojo
pojo类作为mybatis进行sql映射使用,po类通常与数据库表对应,
数据库user表如下图:
User.java如下
package com.itheima.mybatis.pojo;import java.io.Serializable;
import java.util.Date;public class User implements Serializable {/*** */private static final long serialVersionUID = 1L;private Integer id;private String username;// 用户姓名private String sex;// 性别private Date birthday;// 生日private String address;// 地址public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", sex=" + sex+ ", birthday=" + birthday + ", address=" + address + "]";}}
sql映射文件
在config下的sqlmap目录下创建sql映射文件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="test">
</mapper>
加载映射文件
mybatis框架需要加载Mapper.xml映射文件
将users.xml添加在SqlMapConfig.xml,如下:
<mapper resource="sqlmap/User.xml"/>
实现根据id查询用户
使用的sql:
SELECT * FROM `user` WHERE id = 1
. 映射文件:
在user.xml中添加select标签,编写sql:
<?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="test"><!-- id:statement的id 或者叫做sql的id--><!-- parameterType:声明输入参数的类型 --><!-- resultType:声明输出结果的类型,应该填写pojo的全路径 --><!-- #{}:输入参数的占位符,相当于jdbc的? --><select id="queryUserById" parameterType="int"resultType="cn.itcast.mybatis.pojo.User">SELECT * FROM `user` WHERE id = #{id}</select></mapper>
测试程序:
测试程序步骤:
- 创建SqlSessionFactoryBuilder对象
- 加载SqlMapConfig.xml配置文件
- 创建SqlSessionFactory对象
- 创建SqlSession对象
- 执行SqlSession对象执行查询,获取结果User
- 打印结果
- 释放资源
MybatisTest编写测试程序如下:
public class MybatisTest {private SqlSessionFactory sqlSessionFactory = null;@Beforepublic void init() throws Exception {// 1. 创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 2. 加载SqlMapConfig.xml配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");// 3. 创建SqlSessionFactory对象this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);}@Testpublic void testQueryUserById() throws Exception {// 4. 创建SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();// 5. 执行SqlSession对象执行查询,获取结果User// 第一个参数是User.xml的statement的id,第二个参数是执行sql需要的参数;Object user = sqlSession.selectOne("test.queryUserById", 1);// 6. 打印结果System.out.println(user);// 7. 释放资源sqlSession.close();}
}
效果
利用Mybatis写第一个数据库操作的程序相关推荐
- spring boot 入门_SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作
SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作 一.概述 多数据源,就是有多个数据库的配置. 多数据源配置并不麻烦,使用起来和单数据源基本相同,但是,重要的是事务的控制 ...
- MyBatis执行一次数据库操作的原理以及顺序
1.初始化SqlSessionFactory,默认实现是DefultSqlSessionFactory,这个一般是一个应用一个实例就够了,例如单例模式: 2.通过SqlSessionFactory获得 ...
- mysql数据库在哪里写语句_Mysql数据库操作语句
零.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PAS ...
- 直角三角形面积Java_利用Eclipse编写第一个简单的Java程序,实现如下功能。 键盘输入:直角三角形两直角边a, b,根据勾股定理计算斜边的平方值。并输出。 例如:运行效果如下...
kruskal算法对稠密图较为适合 朗读下列城市名字,并与其特色连接起来. C3和C4植物在叶片的解剖构造上由明显的区别,C4植物的维管束鞘有 ,形成 . 感应式电能表的起动电流小于电子式电能表. 美 ...
- SpringCloud或SpringBoot+Mybatis-Plus利用mybatis插件实现数据操作记录及更新对比
引文 本文主要介绍如何使用mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:mybatis插件(拦截器). ...
- Mybatis新发现—在idea中数据库操作出现了异常,最好的查错助手居然是这个!
Mybatis新发现--如果一个数据库操作出现了异常,最好的助手居然是这样! 1. 日志工厂 如果一个数据库操作出现了异常,我们需要排错.日志就是最好的助手. 曾经:sout,debug 现在:日志工 ...
- MyBatis 源码阅读 -- 核心操作篇
核心操作包是 MyBatis 进行数据库查询和对象关系映射等工作的包.该包中的类能完成参数解析.数据库查询.结果映射等主要功能.在主要功能的执行过程中还会涉及缓存.懒加载.鉴别器处理.主键自增.插件支 ...
- 艾伟:基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写
本系列文章导航 基于.NET平台的Windows编程实战(一)--前言 基于.NET平台的Windows编程实战(二)-- 需求分析与数据库设计 基于.NET平台的Windows编程实战(四)-- 数 ...
- 【Python】pymysql基础:数据库操作
####数据库操作 小程序之调用写好的sql模块 这里简单介绍python3对于数据库的操作步骤 重点介绍如何在项目实战中巧妙的调用自己写好的SQL模块,以达到函数式编程尽可能复用代码节省时间的目的. ...
最新文章
- Java library util_sdejavautil.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
- 实现一个vue的图片预览插件
- 只能计算机论文,谈计算机及人工智能技术发展-人工智能论文-计算机论文.docx...
- 不安装oracle 连接数据库,不安装oracle 连接服务器oracle数据库方法
- Kerberos认证过程学习理解
- linux 关闭防火墙 centos7,centos7关闭防火墙和selinux
- Php.ini文件位置在哪里 Php.ini文件找不到
- 编程之美第一篇 01分数规划
- 类Shiro权限校验框架的设计和实现(2)--对复杂权限表达式的支持
- python语法学习第一天--变量、运算符、数据类型
- IIS6上Ssl开发环境的搭建
- 5万字、97 张图总结操作系统核心知识点
- GB35114---聊聊SM2签名格式
- python计算复合年化增长率、年化波动率与夏普比率
- C++——以任意数为底的对数
- 手机图形计算器matlab,Mathlab图形计算器
- java应用程序 从 mian函数进入子程序*
- 关于 WARN conf.Configuration: bad conf file: element not property
- 使用LR和XGBoost跑通criteo点击率预测数据集
- python之数据库-表操作
热门文章
- python中textinput_python – 在Kivy应用程序中获取textinput值
- python做一个窗口样式_python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法...
- docker 部署_Nginx K8s + Docker 部署 ,虚拟机部署教程。
- 多屏互动协议 linux,【Linux系统多屏互动电视】Linux系统多屏互动电视报价及图片大全-列表版-ZOL中关村在线...
- 两个苹果手机如何同步数据_同步苹果手机和Windows的提醒事项
- php数组转ini文件,php – 将数组转换为.ini文件
- 棒棒糖球球机器人_球球大作战刷棒棒糖_球球大作战刷龙蛋攻略
- wind 下装mysql,windows 下安装MySQL
- 长春分享网站服务器迁移,网站迁移公告
- python while true_Python天坑系列(一):while 1比while True更快?