mybatis(一).搭建一个MyBatis项目

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

       能看到这篇文章的人,相信大家对(Java DataBase Connect  jdbc)已经熟练掌握了,SpringJdbc也应该熟悉。spring整合了java的JDBC东西,封装成了一个组件,就是我们常说的持久层dao组件。大大的减少了开发人员的工作量,而MyBatis框架和SpringJDBC差不多,也是一个和数据库交互的持久层组件(这里说组件其实不合适,MyBatis不是某个东西的一部分,应该说是一种技术,一种框架)但实现原理不是封装JDBC,到底怎么实现,笔者现在也不知道,我们先来学会它,会使用它,再想它的实现原理。

接下来我们先搭建一个MyBatis项目,项目名称是:mybatis_demo1。

 我们先来看看搭建一个MyBatis的主要步骤:

1.新建一个web项目

在eclipsp中新建一个web项目,mybatis_demo1,如下图:

2.编写主配置文件

在src目录下先编写主配置文件SqlMapConfig.xml,如下图:

代码如下:

注意:在xml文件中&符号用“&"表示

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
	"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
	<environments default="environment">
		<environment id="environment">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/jsd15077db?useUnicode=true&amp;characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 加载sql定义文件 -->
	<mappers>
		<mapper/>
	</mappers>
</configuration> 

3.引入相关jar包

这里我们要引入的jar包有:

mybatis包:mybatis-3.2.5.jar

数据库连接包:mysql-connector-java-5.1.39-bin.jar  ,这里我们用的是mysql数据库

在WEB-INF/lib目录下引入jar包,如下图:

4.编写对应的实体类

这里我们要操作时的是用户表user,先来看看该表的结构:

在src目录下新建com.cdd.entity包,在该包下新建实体类:User,代码如下:

package com.cdd.entity;

import java.io.Serializable;

public class User implements Serializable {

	private Integer id;   //用户id
	private String username;  //登录名称
	private String pwd;    //密码
	private String name;   //昵称
	private String gender; //性别,1-男;0-女
	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 getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", pwd=" + pwd + ", name=" + name + ", gender=" + gender
				+ "]";
	}
}

5.编写对应实体类的sql操作文件

在com.cdd包下新建一个包sql,在com.cdd.sql包下新建对应User的sql操作文件UserMapper.xml,先写一个查询所有用户信息的sql,代码如下:

注:

      当只需要传一个参数的时,通常拼在sql语句里的参数可以随便写,不必与字段名相同,例如:#{ name},这里面的参数不必        是id(表字段名称相同)。

      当传过来多个参数的时候,通常情况下用一个实体类对象或Map集合来接收,拼在sql 的参数要和对应的字段名称相同。

      拼接sql语句时,parameterType、reslutType对应的类型可以是Java中数据类型也可以是myBatis带数据类型,通常情况下 myBatis带的数据类型是java数据类型的小写。例如: java.Lang.String  对应   string。

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="User">

	<!-- 查询所有用户信息 -->
	<select id="findAll" 
		resultType="com.cdd.entity.User">
		select * from user
	</select>
	
</mapper>

要加载该sql操作文件,还得在主配置文件中,把这个文件配置进去,配置好的主配置文件SqlMapConfig.xml代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
	"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
	<environments default="environment">
		<environment id="environment">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/jsd15077db?useUnicode=true&amp;characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 加载sql定义文件 -->
	<mappers>
		<mapper resource="com/cdd/sql/UserMapper.xml"/>
	</mappers>
</configuration> 

这个主配置文件里,增加的是这部分内容,如下图:

6.获取SqlSession

在com.cdd包下新建test包,在com.cdd.util包下创建一个类MyBatisUtil,代码如下:

package com.cdd.util;

import java.io.IOException;
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;

public class MyBatisUtil {

	public static SqlSession getSqlSession() throws IOException{
		//实例化一个SqlSession工厂构建器
		SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
		
		//主配置文件路径
		String conf = "SqlMapConfig.xml";
		
		//获取主配置文件的流
		//方式1:用字节流
		//InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(conf);
		//方式2:用字符流
		Reader reader = Resources.getResourceAsReader(conf);
		
		//获取SqlSessionFactory实例
		SqlSessionFactory ssf = ssfb.build(reader);
		
		//获取SqlSession
		SqlSession session = ssf.openSession();
		
		return session;
	}
}

7.测试

在com.cdd包新建包test包,在com.cdd.test包下新建Test1类,代码如下:

注:

      SqlSession用完要记得关闭。

      当执行DML语句时, myBatis默认把数据库提交关闭了,要显式调用commit()方法。

package com.cdd.test;

import java.io.IOException;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.cdd.entity.User;
import com.cdd.util.MyBatisUtil;

public class Test1 {

	public static void main(String[] args) throws IOException{
		//获取SqlSession
		SqlSession session = MyBatisUtil.getSqlSession();
		//调用findAll方法
		List<User> userList = session.selectList("findAll");
		//循环输出
		for(User user : userList){
			System.out.println(user);
		}
		
		session.close();  //关闭session
	}
}

运行后,查看控制台,如下图:

注意:我刚才在实体类User类中重写了toString()方法,所有才会打印出每个用户的全部信息。

到这里一个MyBatis项目就搭建好了,接下来补充一些东西

返回数据类型:

1.类对象

(1).属性名与字段一致,使用resultType来设置放回数据类型

(2).属性名和与字段不一致

a.给字段使用别名,使它与属性名一致

b.使用resultMap替代resultType定义如何装载数据

这里通过sql查到的cost_id与实体类CostBean1的id属性相对应。

注:

    resultType默认按名称匹配装载数据;

    resultMap按指定一定匹配规则装载数据;

    在用实体类对象去装载查询回来的数据时,当实体类对象的属性和表字段不一致时,则装载到数据后,实体类对象的这个属性      值为null,接不到数据       

2.Map集合

3.基本类型

参考资料:

        http://www.mybatis.org/mybatis-3/zh/index.html

发布了45 篇原创文章 · 获赞 28 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_41968788/article/details/83869109