JavaWeb框架-MyBatis-1-环境搭建
来源:互联网 发布:淘宝男装棉服 编辑:程序博客网 时间:2024/05/16 15:56
话说
各位读者中午好,现在应该是吃午饭的时刻,我们花一小点的时间总结下MyBatis的环境搭建,何如?
目录
1、MyBatis环境搭建
1)整体布局
2)配置文件
3)实体类
4)测试
5)总结
开发环境:
IDEA(2017.2.5)
Maven Web项目
What MyBatis?前面我们总结的SSH(Spring+Sturts2+Hibernate),这种框架模式是比较古老的了,现在流行SSM(Spring+Struts2+MyBatis),前期陆续总结了Hibernate、Struts2、Spring以及SSH的整合,MyBatis是目前为止Web框架系列最后一位出场嘉宾奥。
它的特点是:是一种数据持久层框架。What 数据持久层?就是ORM,对象关系映射:Object Relational Mapping,通俗点就是数据库中的表对应实体类。按理说,这个我们从一开始的JDBC不久开始用了么?但是现在用起来,越来越Easy!还有不少其他特点,我们在运用过程体会即可。
1、MyBatis环境搭建
1)整体布局
2)配置文件
前面说过,搭建任何框架,基本都是“套路”,先下载jar包。
这里是Maven项目,所以直接配置pom.xml的依赖即可。
导入:mybatis包和mysql连接包(数据持久化嘛,自然要和数据库交互)
1、pom.xml
2、mybatis.xml
3、User.xml
1、pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.hmc.mybatis</groupId> <artifactId>mybatis</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>../mybatis2</module> </modules> <name>mybatis Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--导入mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--导入Mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.8-dmr</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>RELEASE</version> </dependency> </dependencies> <build> <finalName>mybatis</finalName> </build></project>
注意:
这里mysql-connector-java是最新版本,会存在一个MySQL数据库和包时间不一致问题。会在测试部分详细说明。
2、mybatis.xml
这个配置有什么用?就是用来连接数据库的。
我们把类似.xml的配置文件,都放在IDEA自动创建的RESOURCES目录下,就可以自动找到啦!
<?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"> <!--开发环境:development 工作环境:work 测试环境:test --> <!--环境,默认与开发环境的默认保持一致--> <environment id="development"> <!--基于JDBC的事务管理--> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <!--驱动--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--连接地址--> <property name="url" value="jdbc:mysql://localhost:3306/sysmgr?serverTimezone=GMT"/> <!--用户名--> <property name="username" value="root"/> <property name="password" value="119913"/> </dataSource> </environment> </environments> <!--关联实体映射文件--> <mappers> <mapper resource="User.xml"/> </mappers></configuration>
这里需要准备下数据库,在下建立的是sysmgr数据库,数据表是users,字段当然和User实体类保持一致。
create table users(id int(15) auto_increment primary key,name varchar(15),age int(15));insert into users (name,age) values("贾宝玉",20),("林黛玉",17),("史湘云",16),("袭人",18);
3、User.xml
这个有什么用?很简单,把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命名为:包名+类名 确保唯一性--><mapper namespace="com.hmc.mybatis.model.User"> <!--id:查询的唯一标识 resultType 查询返回的类型--> <select id="selectUser" resultType="com.hmc.mybatis.model.User"> select * from users ; </select></mapper>
为什么要这样配置呢?之前我们写JDBC的时候,我们用的是反射机制,主要依靠Field这个类。现在配置在外面,避免每次改动源码。
这么一配置,查询语句就和实体类有了关系,在把User.xml配置到mybatis.xml中,数据库又和这个类有了关系,所以最终我们只需要把控mybatis.xml这样一个配置文件即可。
3)实体类
这里实体类仅做演示,属性简单化。
User
package com.hmc.mybatis.model;/** * User:Meice * 2017/11/18 */public class User { private int id; private String name; private int age; public User() {} public User(int id,String name,int age) { this.id = id; this.name = name; this.age = 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; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; }}
4)测试
流程:
类似Spring中的session。用流的方式读取配置文件==》构建一个SqlSessionFactory,先创建一个工场==》用这个工场来开启openSession==》得到sqlSession==》执行各种查询
package com.hmc.mybatis.test;import com.hmc.mybatis.model.User;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 org.junit.jupiter.api.Test;import java.io.IOException;import java.io.InputStream;import java.util.List;/** * User:Meice * 2017/11/18 */public class MybatisTest { @Test public void test() { //1 、加载mybatis.xml // 法一: InputStream is = this.getClass().getClassLoader().getResourceAsStream("mybatis.xml"); SqlSession session = null; try { InputStream is = Resources.getResourceAsStream("mybatis.xml"); //2、构建SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //3、获取session session = factory.openSession();//默认自动提交事务 //4、执行查询 //获取对应命名空间下的select id List<User> users = session.selectList("com.hmc.mybatis.model.User.selectUser"); //5、使用users System.out.println(users); } catch (IOException e) { e.printStackTrace(); }finally{ //6、关闭资源 if(session != null) session.close(); } }}
运行结果:
"D:\Program Files\Java\jdk1.8.0_144\bin\java" -ea [User{id=1, name='贾宝玉', age=20}, User{id=2, name='林黛玉', age=17}, User{id=3, name='史湘云', age=16}, User{id=4, name='袭人', age=18}]Process finished with exit code 0
注意:
1、配置文件在IDEA中,通通放到Resources下面,否则映射找不到。
笔者开始在把User.xml放在这里:
然后配置映射的时候,这么配置:
<!--关联实体映射文件--> <mappers> <mapper resource="com/hmc/mybatis/mappder/User.xml"/> </mappers>
这样是无论如何也找不到滴!报错:不存在这样一个东东:com/hmc/mybatis/mappder/User.xml
2、读取配置文件有2种方式
第一种是通过:
this.getClass().getClassLoader().GetResourceAsStream();
第二种是通过MyBatis自带的Resources来直接获取getResourceAsStream。
3、最新版本的mysql-connector,会有时间不一致问题,具体报错信息入下:
### Cause: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
就是time zone不一致,mysql服务器的时间和驱动的时间不一致,怎么办?
加上?serverTimezone=GMT,统一用格林尼治时间就好。
<!--连接地址--><property name="url" value="jdbc:mysql://localhost:3306/sysmgr?serverTimezone=GMT"/>
如果用老版本,不会遇到这个问题奥。
4、若配置不全,会有以下这些情况:
1)User.xml中忘记配置namespace,报错如下:
必须配置namespace,不然找不到:Caused by: org.apache.ibatis.builder.BuilderException: Mapper's namespace cannot be empty
2)没有把实体映射文件User.xml配置到mybatis.xml中,会报错:
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.hmc.mybatis.model.User.selectUser
5)总结
1、框架和人一样,都有各自的秉性和特点,mybatis环境搭建起来,有点小麻烦,不过用时10-15min就可以搞定;
2、尝试用最新的包,这样有机会遇到最新的问题。比如:mysql-connnector这样的time zone问题;
3、搭建环境要参考官网,主要是搭建的流程,所以,流程很重要,有了流程,理解了运作原理,就会不重不漏,否则容易“丢三落四”。
好了,先到这里吧,下期再会!开饭喽!
- JavaWeb框架-MyBatis-1-环境搭建
- 集成springmvc和mybatis环境的Javaweb基础框架,省去新手搭建繁琐环境的苦恼
- 集成springmvc和mybatis环境的Javaweb基础框架,省去新手搭建繁琐环境的苦恼
- mybatis框架开发环境搭建
- springMVC+redis+mybatis的javaWeb框架的搭建---套路实战(1)
- MyBatis框架介绍以及环境搭建
- MyBatis框架环境搭建以及配置
- Spring+SpringMVC+mybatis框架环境搭建总结
- 从零开始写javaweb框架笔记11-搭建轻量级JAVAWEB框架-搭建开发环境
- JavaWeb-ssm框架搭建
- JavaWeb-ssh框架搭建
- javaWeb开发环境搭建
- javaWeb开发环境搭建
- 1.JavaWeb环境搭建
- JavaWeb开发环境搭建
- JavaWeb开发环境搭建
- javaweb开发环境搭建
- JavaWeb开发环境搭建
- 黄仁勋
- string里find()函数,判断字符串是否包含某个子串
- 内存分区(C语言)
- 【SSH隧道】使用
- 字符识别OCR(optical character recognition)经典框架解析
- JavaWeb框架-MyBatis-1-环境搭建
- HDU 2391 Filthy Rich(动态规划)
- matlab学习笔记
- Spring Boot 使用 jetty 作为默认的Web容器
- test
- SPP
- 【转载】tomcat端口被占用问题完美解决方案!
- c++语法补充+oj技巧讲解
- java 自我知识总结(十四)抽象abstract