与MyBatis的第一次见面课

【资源准备】

【下载】

  1. 准备一个名为MySource的文件夹,用于存放资源文件。
  2. 下载MyBatis。选择的是mybatis-3.5.2
  3. 官网下载MySql驱动包(java)选择的是mysql-connector-java-8.0.17点此选择其他版本。
  4. 为了高效编程,避免编写XML文件时使用不合法的元素,需要用到mybatis-3-config.dtdmybatis-3-mapper.dtd两个文件。
  5. 为了更好地监视代码中变量的变化和跟踪代码的运行轨迹,同时充当开发环境中的调试器,会用到日志组件,可选择Apache的log4j组件,点此下载(选择apache-log4j-2.12.1-bin.zip)(最终选择log4j-1.2.17.jar和log4j-2.0版本)。
  6. 当然,为了让项目性能更加好一点,我们更愿意使用简单记录日志的方法,因此我们还要下载slf4j简单日志门面服务于log4j。
  7. 下载ASM(java字节码操纵框架,它能动态生成代理类或在装载时修改类),选择asm-6.1.jar
  8. 下载CGLIB(代码生成类库。它简化了asm的操作,实现了在运行期动态生成新的class)选择cglib-3.0
  9. 下载commons-logging(它是Apache commons类库(通用类库)中的一员。commons-logging具有在不修改源码的基础上,灵活使用选择日志方式的功能)。选择commons-logging-1.2-bin
  10. 下载javassist(一种动态字节码生成框架,它支持两种API,Java语言级别和字节码级别。它可以通过配置,在程序运行时,生成临时的java代码,来实现当前需要的特定功能的框架,查看详细介绍)。选择javassist-3.18.0
  11. 下载junit( Java编程语言的单元测试框架,查看详细介绍)。选择junit-4.10
  12. 下载完成后,如下图所示:

已下载好的文件

【筛选】

  1. 将上列下载的压缩包解压,筛选出以下文件,另存在一个名为MyBatisSource的文件夹下,如下图所示:

     

【数据库准备】

1.建立一个名为hr_management的MySQL数据库,添加一张表结构如下图所示的名为user的数据表:

【插入表数据】

【环境配置】

  1. 打开eclipse软件,点击Window下拉选择Preferences,在左侧点击Java--->Build Path --->User Libraries,点击右侧New...按钮新建名为MyBatis的Library,单击ok按钮完成建立,如下图所示:

     

  2. 点击右侧的Add External JARs...按钮,找到刚才准备好的MyBatisSource文件夹,选中下列文件(除去mysql-connector-java-8.0.17文件以外),添加进去:

  3. 点击Apply and Close按钮完成Library的配置:

     

  4. 新建名为MyBatis01的Java Project项目,右击该项目,选择Build Path --->Configure Build Path。如下图所示添加User Library:

    点击Next>按钮,接着,将刚才配置好的MyBatis添加进去,最后点击Apply and Close完成添加:


     

 

点击上面的Apply and Close按钮完成。

【部署文件】

项目MyBatis01的文件部署结构如下图所示:

【编辑文件】

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=""><!-- 定义所有的数据库连接,并指定使用哪一个数据源 -->
<environment id=""><!-- 定义数据源名称 -->
<transactionManager type="JDBC"/>
      <dataSource type="POOLED"><!-- 定义一个数据源,连接方式为数据库连接池方式 -->
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/hr_management?serverTimezone=GMT%2B8"/>
        <property name="username" value="root"/>
        <property name="password" value="HackerAC@DB2019"/>
      </dataSource>
</environment>
</environments>

<mappers>
    <mapper resource="com/mapper/UserMapper.xml"/>
  </mappers>
</configuration>

UserMapper.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.mapper.UserMapper"><!-- 表示声明一个数据库操作包名 -->

<!-- 声明数据库的操作方法 -->
<!-- 查询全部内容 -->
  <select id="selectAll" parameterType="int" resultType="com.pojo.User">
    select * from user
  </select>
</mapper>

User.java:

package com.pojo;

public class User {
	private int id;
	private String uname,city,sex;
	
	public User() {}
	
	public User(String uname, String city, String sex) {
		this.uname = uname;
		this.city = city;
		this.sex = sex;
	}
	
	public int getId() {
		return id;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	@Override
	public String toString() {
		return "User [id=" + id + ", uname=" + uname + ", city=" + city + ", sex=" + sex + ", getId()=" + getId()
				+ ", getUname()=" + getUname() + ", getCity()=" + getCity() + ", getSex()=" + getSex() + ", getClass()="
				+ getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]";
	} 
	
}

IUserDAO.java:

package com.mapper;

import java.util.List;
import com.pojo.User;

public interface IUserDAO {
	public List<User> selectAll() throws Exception;
}

UserServiceImpl.java:

package com.service.impl;

import java.io.InputStream;
import java.util.List;

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 com.mapper.IUserDAO;
import com.pojo.User;

public class UserServiceImpl implements IUserDAO {
	

	public List<User> selectAll() throws Exception{
		//业务逻辑的编写
		//1.读取mybatis-config.xml并运行
		InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
		//2.使用is输入流创建SessionFactory
		SqlSessionFactory build = new SqlSessionFactoryBuilder().build(is);
		//3.创建数据库连接
		SqlSession session = build.openSession();
		//4.调用Mapper文件中声明的Sql语句
		List<User> users = session.selectList("com.mapper.UserMapper.selectAll");
		return null;
	}

}

Test.java:

package test;

import com.service.impl.UserServiceImpl;

public class Test {

	public static void main(String[] args) {
		// 调用User的实现类,完成数据库查询
		UserServiceImpl userImpl=new UserServiceImpl();
		try {
			userImpl.selectAll();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

【报错解决】

【错误1】:Failed to instantiate SLF4J LoggerFactory

【解决错误1】:

查看我们配置的Library:MyBatis中的文件,发现理论上log4j-api-2.12.1.jar文件和log4j-core-2.12.1.jar文件以及log4j-2.12.1.jar文件三个文件协作才能正常完成日志功能,但是我们下载的log4j-api-2.12.1版本中官方没有给出log4j-2.12.1.jar的文件,目前还不明白是什么原因,但是已经找到一条解决办法,那就是下载较低的版本如log4j-1.2.17.jar版本配合log4j-core-2.0-rc1.jar以及log4j-api-2.0-rc1.jar使用。构建好的名为MyBatis的Library如下图所示:

【错误2】:

log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

【解决错误2】:在MyBatis01的文件根目录下创建名为log4j.properties的文件,然后编辑内容为:

# Global logging configuration
log4j.rootLogger=DEBUG,stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

如下图所示:

【错误3】

### Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.pojo.User with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.pojo.User.<init>()
### The error may exist in com/mapper/UserMapper.xml
### The error may involve com.mapper.UserMapper.selectAll-Inline
### The error occurred while setting parameters
### SQL: select * from user

【解决错误3】

由报错内容“java.lang.NoSuchMethodException: com.pojo.User.<init>()”可知,该项目的名为User的pojo没有无参构造(或初始化)方法,向其中添加一个无参构造方法即可。

【运行结果】

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值