JDBChtml
Mysqljava
Java基础mysql
Mavengit
Junit程序员
框架:是有配置文件的。最好的方式:看官网文档github
简介
什么是 MyBatis?sql
MyBatis 是一款优秀的持久层框架 它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎全部的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
如何得到MyBatis?数据库
Maven仓库 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> github:https://github.com/mybatis/mybatis-3/releases 中文文档:https://mybatis.org/mybatis-3/zh/index.html
数据持久化apache
持久化就是将程序的数据在持久状态和瞬时状态转化的过程 内存:断电即失 数据库(JDBC),io文件持久化。 生活中:冷藏、罐头。
为何须要持久化?session
有一些对象,不能让他丢掉。
Dao层、Service层、Controller层…
完成持久化工做的代码块 层界限十分明显
帮助程序员将数据存入到数据库中。 方便 传统的JDBC代码太复杂了。简化、框架、自动化。 不用Mybatis也能够。更容易上手。技术没有高低之分 优势: 简单易学 灵活 sql和代码的分离,提升了可维护性。 提供映射标签,支持对象与数据库的orm字段关系映射 提供对象关系映射标签,支持对象关系组建维护 提供xml标签,支持编写动态sql。
最重要的一点:使用的人多!
Spring
SpringMVC
SpringBoot
思路:搭建环境–>导入Mybatis–>编写代码–>测试!
搭建数据库
CREATE DATABASE mybatis; use mybatis; CREATE TABLE user( id INT(20) not null PRIMARY KEY, name VARCHAR(30) DEFAULT NULL, pwd VARCHAR(30) DEFAULT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO user (id,name,pwd) VALUES (1,'浴血','123456'), (2,'张三','123456'), (3,'李四','123890')
新建项目
新建一个普通的maven项目 删除src目录 导入maven依赖
以后创建maven的父工程与子工程
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--父工程--> <groupId>com.yuxue</groupId> <artifactId>Mybatis-study</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>mybatis-01</module> </modules> <!--导入依赖--> <dependencies> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
子工程
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <parent> <artifactId>Mybatis-study</artifactId> <groupId>com.yuxue</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mybatis-01</artifactId>
<?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核心配置文件--> <configuration> <!--environments配置环境组--> <!--default默认环境--> <environments default="development"> <!--environment单个环境--> <environment id="development"> <!--transactionManager配置事务管理器--> <transactionManager type="JDBC"/> <!--配置链接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>
package com.yuxue.utils; 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; /** * @author yuxue * sqlSessionFactory --> sqlSession */ public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try{ //使用mybatis第一步、获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); }catch(IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,咱们就能够从中得到 SqlSession 的实例了。 // SqlSession 彻底包含了面向数据库执行 SQL 命令所需的全部方法。 // 你能够经过 SqlSession 实例来直接执行已映射的 SQL 语句。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
package com.yuxue.pojo; public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } 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 String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
package com.yuxue.dao; import com.yuxue.pojo.User; import java.util.List; public interface UserMapper { //查询全部用户 List<User> getUserList(); }
<?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=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.yyz.dao.UserMapper"> <select id="getUserList" resultType="com.yyz.pojo.User"> select * from mybatis.user </select> </mapper>
<!--每个Mapper.xml都须要在Mybatis核心配置文件中注册--> <mappers> <mapper resource="com/yyz/dao/UserMapper.xml"></mapper> </mappers>
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
使用juint进行测试
package com.yuxue.dao; import com.yuxue.pojo.User; import com.yuxue.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserMapperTest { @Test public void test(){ //第一步:得到SqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //执行SQL UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } //关闭SqlSession sqlSession.close(); } }
可能会遇到的问题: 配置文件没有注册 绑定接口错误 方法名不对 返回类型不对 Maven导出资源问题
以上就是咱们所写的第一个Mybatis程序
namespace中的包名要和dao/mapper接口的包名保持一致
<mapper namespace="com.yuxue.dao.UserMapper">
选择查询语句;如下在select当中的参数很是重要
id:就是对应的namespace中的方法名;
resultType:Sql语句执行的返回值!
parameterType:参数类型!
编写接口
package com.yuxue.dao; import com.yuxue.pojo.User; import java.util.List; public interface UserMapper { //根据id查询用户 User getUserById(int id); }
编写对应的mapper中的sql语句
<select id="getUserById" resultType="com.yuxue.pojo.User" parameterType="int"> select * from mybatis.user where id = #{id}; </select>
测试
@Test public void getUserById(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); }
注意点:增删改须要提交事务
resource绑定mapper,须要使用路径! 程序配置文件必须符合规范 NullPointerException,没有注册到资源 输出的xml文件中存在中文乱码问题 maven资源没有导出问题