第一节:mybatis入门
1、新建数据表
本次测试使用mysql数据,数据库名称为mybatis,新建一张表person,建表语句如下:
CREATE TABLE `person` (
`id` INT ( 11 ) PRIMARY KEY auto_increment,
`first_name` VARCHAR ( 255 ),
`last_name` VARCHAR ( 255 ),
`age` INT ( 11 ),
`email` VARCHAR ( 255 ),
`address` VARCHAR ( 255 )
);
插入测试数据如下:
insert into person(first_name,last_name,age,email,address) VALUES('Schmitt', 'Carine',25,null,'beijing');
insert into person(first_name,last_name,age,email,address) VALUES('King', 'Jean',36,'Jean@163.com','beijing');
insert into person(first_name,last_name,age,email,address) VALUES('Ferguson', 'Schmitt',23,'88888@qq.com','shanghai');
insert into person(first_name,last_name,age,email,address) VALUES('Piestrzeniewicz', 'Nelson',55,null,'nanjing');
insert into person(first_name,last_name,age,email,address) VALUES('Jytte', 'Jean',22,'55555@qq.com','shenzhen');
insert into person(first_name,last_name,age,email,address) VALUES('Victorino', 'Diego',19,'Diego@163.com','shanghai');
insert into person(first_name,last_name,age,email,address) VALUES('Julie', 'Schmitt',56,null,'nanjing');
insert into person(first_name,last_name,age,email,address) VALUES('Gao', 'Diego',45,'66666@qq.com','beijing');
insert into person(first_name,last_name,age,email,address) VALUES('Piestrzeniewicz', 'Schmitt',36,'44444@qq.com','beijing');
insert into person(first_name,last_name,age,email,address) VALUES('Frdrique', 'Juri',25,'99999@qq.com','beijing');
结果如下:

2、mybatis入门
1、新建maven工程
本次演示使用IntelliJ IDEA社区版,新建一个maven工程,最终结果如下:

2、添加依赖,主要是mybatis和mysql
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
3、编写数据库表person对应的实体。
package com.yefengyu.mybatis.entity; public class Person
{
private Integer id; private String firstName; private String lastName; private Integer age; private String email; private String address; public Integer getId()
{
return id;
} public void setId(Integer id)
{
this.id = id;
} public String getFirstName()
{
return firstName;
} public void setFirstName(String firstName)
{
this.firstName = firstName;
} public String getLastName()
{
return lastName;
} public void setLastName(String lastName)
{
this.lastName = lastName;
} public Integer getAge()
{
return age;
} public void setAge(Integer age)
{
this.age = age;
} public String getEmail()
{
return email;
} public void setEmail(String email)
{
this.email = email;
} public String getAddress()
{
return address;
} public void setAddress(String address)
{
this.address = address;
} @Override
public String toString()
{
return "Person{" +
"id=" + id +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", age=" + age +
", email='" + email + '\'' +
", address='" + address + '\'' +
'}';
}
}
4、编写mapper接口
package com.yefengyu.mybatis.mapper; import com.yefengyu.mybatis.entity.Person; public interface PersonMapper
{
Person getPerson(Integer id);
}
5、编写mapper映射文件
在resources下面新建一个mapper文件夹,再在里面新建一个PersonMapper.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.yefengyu.mybatis.mapper.PersonMapper">
<select id="getPerson" resultType="com.yefengyu.mybatis.entity.Person">
select * from person where id = #{id}
</select>
</mapper>
6、新建一个mybatis全局配置文件,详细信息见官网
在resources下面新建mybatis-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>
<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://127.0.0.1:3306/mybatis?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/PersonMapper.xml"/>
</mappers>
</configuration>
7、测试
package com.yefengyu.mybatis; import com.yefengyu.mybatis.mapper.PersonMapper;
import com.yefengyu.mybatis.entity.Person;
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 java.io.IOException;
import java.io.InputStream; public class Main
{
public static void main(String[] args)
throws IOException
{
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person person = mapper.getPerson(1);
System.out.println(person);
sqlSession.close();
}
}
8、结果
Person{id=1, firstName='null', lastName='null', age=25, email='null', address='beijing'}
分析:这条查询的结果和数据库相比,firstName和lastName字段查询有问题,没有查询到结果,这个主要原因是数据库字段命名是使用下划线,而java实体使用驼峰法命名,导致mybatis无法自动匹配,解决方法有很多,此处使用最原始的一种:给查询语句中的字段添加别名的方式。
<?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.yefengyu.mybatis.mapper.PersonMapper">
<select id="getPerson" resultType="com.yefengyu.mybatis.entity.Person">
select * from person where id = #{id}
</select>
</mapper>
中的查询语句由
select * from person where id = #{id}
改为下面这句
select id, first_name firstName, last_name lastName, age, email, address from person where id = #{id}
这样就可以查询到我们需要看到的效果,是不是很神奇?
Person{id=1, firstName='Schmitt', lastName='Carine', age=25, email='null', address='beijing'}
第一节:mybatis入门的更多相关文章
- Java Persistence with MyBatis 3(中文版) 第一章 MyBatis入门
本章将涵盖以下话题: ž MyBatis是什么? ž 为什么选择MyBatis? ž MyBatis安装配置 ž 域模型样例 1.1 MyBatis是什么 MyBatis是一个简化和实现了Ja ...
- Android精通教程-第一节Android入门简介
前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...
- php第一节(入门语法、数据类型)
<?php /** * 变量命名用 $ 符 * 变量名称的命名规范 * 1.变量名称以$标示 * 2.变量名称只能以字母和下划线开头 * 3.变量的名称只能包含字母.下划线.数字 * 4.变量名 ...
- JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明
1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...
- Ionic 入门与实战之第二章第一节:Ionic 环境搭建之开发环境配置
原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第二章第一节,主要对 Ionic 的开发环境配置做了简要的介绍,本文介绍的开发环境为 Mac 系统,Windows 系统基本类似,少许 ...
- Mybatis入门及Dao开发方式
本节内容: Mybatis介绍 使用jdbc编程问题总结 Mybatis架构 Mybatis入门程序 Dao的开发方式 SqlMapConfig.xml文件说明 一.Mybatis介绍 MyBatis ...
- Mybatis入门教程之新增、更新、删除功能_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 上一节说了Mybatis的框架搭建和简单查询,这次我们来说一说用Mybatis进行基本的增删改操作: 一. 插入一条数据 ...
- MyBatis1:MyBatis入门
MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...
- android内部培训视频_第一节
声明:本视频为公司内部做android培训时录制的,无任何商业目的.同时鉴于水平有限,可能不符合您的需求,放在这里的目的是提供给公司同事下载,作为培训的一个记录,也作为一个系列教程的自我督促完成的理由 ...
随机推荐
- Raft Paper 简译
本文是对 Raft Paper 核心部分的意译,不包括原文中的如下章节:<3 Paxos 的优缺点论述>.<4 Raft 的易理解性介绍>.<9 Raft 算法的易理 ...
- js try{}catch(e){}的理解
程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(exception handlers).如果例外处理代码设计得周全,那么最终呈现给用户的就将是一个友好的界面.否则,就会 ...
- neo4j使用cypher查询路径避免出现环路
neo4j在使用可变长路径找两个点之前的所有路径时,会返回包含环路的路径(一个点在路径中出现两次),如下面的语句: MATCH path = (x)-[:KNOWS*]-(y) 可能返回a->b ...
- VS进程附加的使用
一,附加进程(ctrl+alt+p)调试本地服务器接口(WCF,webapi等)的api 1>接口(WCF,webapi等)的api发布到本地IIS服务器,然后使用附加进程,将你发布的IIS添加 ...
- Java技术中的三大特性
1.虚拟机 Java虚拟机JVM(Java Virtual Machine)在Java编程里面具有非常重要的地位,约相当于前面学到的Jav ...
- Codeforces 1203F (贪心, DP)
题意:有n个任务,你的初始rating是m, 这n个任务有两个指标:完成这项任务所需的最低rating(a[i]),以及完成这项任务后rating的变化(可能为负)(b[i]).rating不能为负. ...
- hbase配置详解(转)
转自:http://www.cnblogs.com/viviman/archive/2013/03/21/2973539.html 1 准备工作 因为我只有一台机器,所以,一切都成为了伪分布,但是,其 ...
- 一、创建且运行JPA工程
1. 创建JPA 工程 (1)选择创建 JPA Project,注意不是Java Project (2)JPA version选择 2.0 (3)选择用户库,否则会出现 At least one us ...
- 开发react 应用最好用的脚手架 create-react-app
安装 npx create-react-app my-app cd my-app npm start 安装后之后,就是这样的了 配置 这样的”零配置”没法满足我们的需求,我们需要自定义,需要加一些 l ...
- DVR和NVR的区别(深度好文)(转)
DVR接模拟摄像机,NVR是接IP camera的录像机. DVR的录像效果取决于摄像机与DVR本身的压缩算法与芯片处理能力,而NVR的录像效果则主要取决于IPcamera,因为IPcamera输出的 ...