学习MyBatis (一)

MyBatis (一)

首先贴上mybatis官方参考文档网址
http://www.mybatis.org/mybatis-3/zh/configuration.html
里面有mybatis的具体使用介绍
在这里插入图片描述
Tip:可以换成中文哦!

mybatis优点

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

  1. 先建库建表
    在这里插入图片描述
    表结构在这里插入图片描述
  2. 建立一个maven工程,用来测试mybatis

工程目录结构
工程目录结构
pojo包放实体,mapper文件夹内存放sql映射文件,mybatis-cofigs-xml为mybatis核心配置文件,然后下面的为测试类,pom.xml引入依赖
目前暂时为此结构,为后期实现mvc结构准备,
—小白学习篇

Author.java

package org.blog.pojo;

public class Author {
	private Integer id; // ID
	private String username; // 用户
	private String password; // 密码
	private String email; // email
	private String bio; // 个人简介
	
//	public Author() {
//		System.out.println("Author()");
//	}

	// getter setter
	public Author(Integer id, String username, String password, String email, String bio) {
		super();
		System.out.println("Author(...)");
		this.id = id;
		this.username = username;
		this.password = password;
		this.email = email;
		this.bio = bio;
	}
	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 getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getBio() {
		return bio;
	}
	public void setBio(String bio) {
		this.bio = bio;
	}
	// toString()
	@Override
	public String toString() {
		return "Author [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email + ", bio="
				+ bio + "]";
	}
}

mybatis-configs.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>
  <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:///blogsys"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

封装实体类数据
按照官方的例子 从 XML 中构建 SqlSessionFactory,
在这里插入图片描述
这里用到Junit单元测试,需要引入对应依赖
TestBase.java

package org.mybatis;

import java.io.IOException;
import java.io.InputStream;

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.Before;
import org.junit.Test;

public class TestBase {
	protected SqlSessionFactory sqlSessionFactory;
	@Before
	public void init()throws IOException{
		String resource = "mybatis-configs.xml";
		InputStream inputStream = 
		Resources.getResourceAsStream(resource);
		sqlSessionFactory = 
		new SqlSessionFactoryBuilder().build(inputStream);
	}
	@Test
	public void testSqlSession(){
		SqlSession session=
		sqlSessionFactory.openSession();
		System.out.println(session);
	}
}

TestAuthor01.java

package org.mybatis;

import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.blog.pojo.Author;
import org.junit.Test;


public class TestAuthor01 extends TestBase{

	@Test
	public void testFindAuthor(){
		// 1.获取sqlsession对象
		SqlSession session=
		sqlSessionFactory.openSession();
		// 2.执行sql查询
		String namespace="org.blog.pojo";
		String elementId="findAuthor";
		String statement=namespace+"."+elementId;
		Map<String,Object> map=
		session.selectOne(statement,1);
		System.out.println(map);
		System.out.println(map.getClass().getName());
		// 3.释放资源
		session.close();
	}
	
	@Test
	public void testSelectAuthor(){
		// 1.获取sqlsession对象
		SqlSession session=
				sqlSessionFactory.openSession();
		// 2.执行sql查询
		String namespace="org.blog.pojo";
		String elementId="selectAuthor";
		String statement=namespace+"."+elementId;
		Author author=
		session.selectOne(statement,1);
		System.out.println(author);
		// 3.释放资源
		session.close();
	}
	
}

最后在mapper文件夹中的AuthorMapper.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="org.blog.pojo">
  <!-- 基于id查询作者信息 ,在mybatis中每个元素
    经解析以后都会封装一个MappedStatement对象,
    当有多个MappedStatement时,系统底层还会将这些
    对象存储到Map集合.-->
  <select id="findAuthor" 
          resultType="map">
          select * from author where id = #{id}
  </select>
 
  <select id="selectAuthor"
          resultType="org.blog.pojo.Author">
          select * from author where id = #{id}
  </select>
  
</mapper>

执行Junit测试框架 看看是否能从数据库中查询到数据

经历过的坑有

  • 映射文件中namespace的值加上sql语句id的值与statement不一致,后续可以利用mapper接口开发优化
  • findAuthor方法返回值类型为map可行,selectAuthor方法的返回值类型要么就写类全名,要么在核心配置文件中加上别名控制,经测试,添加了之后的返回类型是可以忽略大小写的
  • mapper文件的引入,mybatis-configs.xml的结构以及属性值,都是值得注意的地方,因为xml文件查错很难受,最好是写上头文件中的信息使xml文件在编写时能有alt+/的提示

后续学习利用mapper接口实现效果
学习笔记 文章粗糙 多多指教

详细的别名、映射类型和其他配置解释见
http://www.mybatis.org/mybatis-3/zh/configuration.html

猜你喜欢

转载自blog.csdn.net/weixin_42182945/article/details/88184300