MyBatis入门教程(基于Mybatis3.2)

 

MyBatis和Hibernate一样都是基于ORM的关系型数据库框架

ORM工具的基本思想:

1.从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. sessionfactory 产生 session 3. session中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session

5.java对象和数据库之间有做mapping的配置文件,也通常是xml文件。

 

 

MyBatis 是支持 普通 SQL 查询 , 存储过程 和 高级映射 的优秀持久框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。

 

本文就一个demo的形式,讲诉MyBatis的数据库操作过程,新建一个web项目,项目结构如图:

我们需要准备mybatis3.2.jar和mysql的jar,日志输出的jar根据自己项目的需要

 

 

新建数据库,数据表是users,设置id为主键,同时自动增长

 

 

新建一个资源文件config

编写数据库配置信息文件db.properties:

driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/db_mysql?useUnicode\=true&characterEncoding\=utf-8
username=root
password=111

 

 

 

编写pojo类:

package com.mybatis.entity;public class User {/** ID*/private int id;/** 用户姓名 */private String name;/** age*/private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + "]";}}

 

 

 

编写pojo类对应的mapper文件:

<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 
-->
<mapper namespace="com.mybatis.mapper.userMapper"><!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为findById,id属性值必须是唯一的,不能够重复parameterType可以在MyBatis的配置文件里设置,也可以直接用包名+类名--><insert id="save" parameterType="User">insert into users(id,name,age) value(#{name},#{age})</insert><update id="update" parameterType="User">update users set name=#{name},age=#{age} where id=#{id}</update><delete id="delete" parameterType="int">delete from users where id=#{id}</delete><select id="findById" parameterType="int" resultType="User">select * from users where id=#{id}</select><select id="findAll" resultType="User">select * from users</select>
</mapper>

 

 

然后,在编写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><!-- 数据库配置文件  --> <properties resource="db.properties" />  <!-- 实体类,简称 -设置别名 --><typeAliases><typeAlias alias="User" type="com.mybatis.entity.User" /></typeAliases><!-- 读取db.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><!-- 注册userMapper.xml文件 --><mappers><mapper resource="com/mybatis/mapper/userMapper.xml"/></mappers></configuration>

 

 

测试类:

import java.io.Reader;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.mybatis.entity.User;public class Test {public static void main(String[] args) {String resource = "mybatis-config.xml";try{//加载Mybatis的配置文件Reader reader = Resources.getResourceAsReader(resource);//构建sqlSession的工厂SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//创建可以执行sql的SqlSessionSqlSession session = sessionFactory.openSession();//映射sql的标志字符串String statement = "com.mybatis.mapper.userMapper.findById";//执行查询返回id为1的User对象User user = session.selectOne(statement,1);System.out.println(user);}catch (Exception e) {e.printStackTrace();}}
}

然后,可以编写日志文件,进行日志输出

log4j.properties\uFF0C
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

运行测试类,可以输出,说明我们的mybatis搭建好了,可以进行数据库操作

 

 

需要注意的:

为了统一编码,建议新建数据库时设置成utf-8的

还有测试时,那个id一定要和userMapper.xml里的id对应,mybatis是根据这个id调用sql函数的哦

配置mybatis文件时,一定要注意顺序,一般都是先配置别、数据库配置、然后mapper文件注册的

 

 

转载于:https://www.cnblogs.com/mzq123/p/5450632.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员效率:画流程图常用的工具

1、VisioVisio是Windows操作系统下运行的流程图和矢量绘图软件&#xff0c;它属于Office办公软件的一部分。特点&#xff1a;内置大量的模板方便使用&#xff0c;界面简洁操作方便&#xff0c;功能十分全面&#xff0c;因为属于office系列可以很方便和word办公软件结合起来使用…

如何实现数组和 List 之间的转换?

数组转 List&#xff1a;使用 Arrays. asList() 进行转换。 List 转数组&#xff1a;使用 List 自带的 toArray() 方法

java同事不写泛型_跳了一次JAVA泛型擦除的坑

记录一下今天在帮同事解决使用spring参数注入问题的时候由于对泛型的理解不到位而遇到的坑。如下代码所示&#xff1a;RequestMapping(value"saveAll")public ResponseMsg saveAll(List rules){Rule rulerules.get(0); //这行代码在测试的时候报错了......}这段代码的…

程序员职场:拥有一个学位将会在你的职业生涯中更加顺利!

1、作为程序员为什么要拥有学位&#xff1f;很多情况下&#xff0c;作为程序员&#xff0c;学位是进入大公司的敲门砖。现在很多大的科技公司&#xff0c;学位是硬性要求。一般都是本科以上的学历&#xff0c;甚至有的必须是硕士以上学历。如果你的学历达不到&#xff0c;基本上…

集合和数组的区别

集合和数组的区别 数组是固定长度的&#xff1b;集合可变长度的。 数组可以存储基本数据类型&#xff0c;也可以存储引用数据类型&#xff1b;集合只能存储引用数据类型。 数组存储的元素必须是同一个数据类型&#xff1b;集合存储的对象可以是不同数据类型。

程序员常见的职业病有哪些?

程序员是一个久坐的行业&#xff0c;基本上一天有十几个小时需要坐在电脑旁边&#xff0c;随之而来会给我们这些广大的程序员朋友们身体健康带来了很大的隐患。作为一名优秀的程序员&#xff0c;爱护自己的身体也是非常重要的&#xff0c;毕竟身体是革命的本钱嘛。今天主要给大…

java文件流null_JAVA 获取资源文件对象为NULL

今天&#xff0c;写一个添加背景音乐的方法时&#xff0c;在导入当前文件夹下的音乐时中始终出现,以下的异常&#xff0c;Exception in thread "main" java.lang.NullPointerException文件存储位置存放在当前的modlue目录下,格式为wav.源代码private void playBGM(){…

iOS数据持久化

TODO&#xff1a;数据持久化 CoreData FMDB Sqlite3 归档解档 plist NSUserDefault转载于:https://www.cnblogs.com/newhope/p/5382034.html

程序员如何快速消除自己的知识短板?

在程序员的职业生涯当中&#xff0c;知识短板将会是你职业生涯发展的瓶颈。只要你能够消除这些短板&#xff0c;这对你的职业发展会大有裨益。本篇文章主要给大家分享一下如何解决自己工作当中的知识短板。希望对大家能有些帮助。1、关于知识短板的概念理解我个人认为所谓的知识…

HashMap默认大小和扩容后的大小

put添加的元素Entry就是数组中的元素&#xff0c;每个Map.Entry其实就是一个key-value对&#xff0c;它持有一个指向下一个元素的引用&#xff0c;这就构成了链表。 创建HashMap对象默认情况下&#xff0c;数组大小为16。 开始扩容的大小原来的数组大小*loadFactor。 扩容后…

swift函数

1、函数定义格式&#xff1a;func 函数名(形参列表) ->返回值类型{//函数体}形参列表的格式&#xff1a;形参名1&#xff1a;形参类型&#xff0c;形参名2&#xff1a;形参类型&#xff0c;....如&#xff1a;func max(nun:Int, num:Int) ->Int{return 0;}2、无返回值的…

java 解密后为空_java RSA加密解密

该工具类中用到了BASE64&#xff0c;需要借助第三方类库&#xff1a;javabase64-1.3.1.jar注意&#xff1a;RSA加密明文最大长度117字节&#xff0c;解密要求密文最大长度为128字节&#xff0c;所以在加密和解密的过程中需要分块进行。RSA加密对明文的长度是有限制的&#xff0…

程序员效率:职业倦怠的理解

作为程序员保持高效的工作效率最大的挑战之一就是身体和心理上产生的倦怠。这个是非常常见的&#xff0c;比如刚开始你自己做一个新项目的时候&#xff0c;项目刚开始&#xff0c;我们总是充满激情、精力旺盛。大多数情况随着时间的推移&#xff0c;我们的激情慢慢减退&#xf…

OnItemClickListener,OnScrollListener应用

OnItemClickListener&#xff1a;处理视图中单个条目的点击事件 OnScrollListener:监听滚动的变化&#xff0c;可以用于视图在滚动中加载数据 OnItemClickListener&#xff1a;实现AdapterView.OnItemClickListener接口&#xff0c;别忘记在MainActivity中调用listView.setOnIt…

Mysql 多实例multi_mysqld_multi多实例运行

mysqld_multi多实例运行2016-05-04 TsengYia126.com http://tsengyia.blog.chinaunix.net#################################################################系统环境&#xff1a;RHEL 6.7 [2.6.32-573.el6.x86_64]软件环境&#xff1a;mysql-server-5.1.73-5.el6_6.x86_64m…

HashMap和ArrayList初始大小和扩容后的大小

创建HashMap对象默认情况下&#xff0c;数组大小为16。 开始扩容的大小原来的数组大小*loadFactor。 扩容后大小是原来的2倍&#xff0c;其中加载因子loadFactor的默认值为0.75&#xff0c;这个参数可以再创建对象时在构造方法中指定。 例如&#xff1a; 16*0.7512&#xf…

程序员效率:如何合理的分解任务

有这样一句名言&#xff1a;要吃掉一头大象&#xff0c;每次吃一口。—— 克雷顿艾布拉姆斯&#xff08;Creighton Abrams&#xff09;这句名言给我们的启示就是&#xff1a;看起来非常艰巨的任务&#xff0c;不能一蹴而就&#xff0c;需要进行任务分解&#xff0c;一步一步把它…

linux安装nagios客户端

( 安装到 被监控的机器上)新增用户和组 useradd nagiosgroupadd nagcmd usermod -a -G nagcmd nagios (如果安装中报没有c编译器&#xff0c;就 yum install gcc) 下载nagios插件 wget http://sourceforge.net/projects/nagiosplug/files/nagiosplug/1.4.15/nagios-plugins-1.4…

键值的 key 和 value 允许为null吗

总结&#xff1a; HashMap对象的key、value值均可为null。HahTable对象的key、value值均不可为null。两者的的key值均不能重复&#xff0c;若添加key相同的键值对&#xff0c;后面的value会自动覆盖前面的value&#xff0c;但不会报错。 例子 可以看到添加key相同的键值对&am…

程序员:你的业余时间是怎么被浪费掉的?

作为一名程序员如何有效的管理自己的业余时间&#xff0c;会成为和别人拉开差距的重要因素。当然你不能把每天的每一分钟都充分利用起来。这个目标不可能实现。我们可以做到的是找到自己在哪一方面浪费的时间最多&#xff0c;然后逐渐的去消除它。如果你可以消除掉一到两个方面…