依赖导入
第一步:编写Mybatis的核心配置文件
放在resources目录下,官方建议命名:mybatis-config.xml
<?xml version="1.0" encoding="UTF8" ?>
<!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://localhost:3306/mysql1"/>
<property name="username" value="数据库用户名"/>
<property name="password" value="数据库密码"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/man/dao/UserDao.xml"/>
</mappers>
</configuration>
这一块有一个重要的点就是
environments default
这个是你要操作的数据库的名字
environment id 这个是下面要配置的数据库的名字
需要对应起来
第二步:编写接口
我以包目录结构为
来演示。
package mybatis.dao;
import mybatis.pojo.User;
import java.util.List;
public interface UserDao {
//查找全部用户
List<User> getUserList();
//根据ID查找用户
User getUserByID(int id);
//insert 语句
int addUser (User user);
//修改用户
int upDate (User user);
//删除一个用户
int deleteUser(int id);
}
接口里放的是一些抽象方法
第三步:编写接口实现类,即接口的xml文件
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis.dao.UserDao">
<select id="getUserList" resultType="mybatis.pojo.User">
select * from mysql1.student
</select>
<select id="getUserByID" parameterType="int" resultType="mybatis.pojo.User">
select * from mysql1.student where id = #{id};
</select>
</mapper>
这里面有几个要注意的点:
namespace是命名空间,里面要填写的是接口的全限定名称
id 对应的是接口内的方法名
resultType是对应的结果要封装的类型
写到现在,我们要将核心配置文件里的mapper
的路径改为接口实现类xml文件的路径
第四步:
编写 实体类
成员变量要和数据库表的数据类型对应,并且生成get,set方法,以及有参数,无参数的构造方法
以及to String的打印方法。
package mybatis.pojo;
public class User {
private int id;
private String name;
private String emain;
private int age;
public User() {
}
public User(int id, String name, String emain, int age) {
this.id = id;
this.name = name;
this.emain = emain;
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 String getEmain() {
return emain;
}
public void setEmain(String emain) {
this.emain = emain;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", emain='" + emain + '\'' +
", age=" + age +
'}';
}
}
第五步:编写工具类
这里可以借鉴官方给的官方文档
package mybatis.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;
public class MybatisUtils {
//提升作用域
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//读取主配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
这里需要注意的是:try里的内容来自官方文档,try里第三行的地方我在代码块外定义,作用是提高作用域
其次里面还有一个getSqlSession方法,调用方法生成对象sqlSession。
第六步:编写测试类
在要测试的方法前加Test注解标注这是一个测试
然后第一行是调用工具类 中的方法生产sqlSession对象
接下来有两种方式,推荐第一种也是新的一种方法。
调用对象里的方法,将接口的类文件生成对象,接口不能直接创建对象。
调用对象中的getUserList()(即接口中的抽象方法)并将结果封装到结果集中
然后
采用for循环输出查询结果即可。
※经过个人测试,一般会出现以下问题,所以在此给出解决大部分问题的方法
最终的目录如下:
1️⃣java不会编译位于src下的xml文件,所以我们要将xml弄到target中class中对应的接口目录下
方法一:将xml复制,然后粘贴进对应位置
方法二:进行预编译,
方法三:可以在pom文件中加入
<!-- 在build中配置resources,防止资源导出失败的问题 -->
<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>
可以解决无法找到xml文件的问题
报错方式一般是(con’t find XXX.xml)
2️⃣字符集的问题
有的电脑或者是IDEA的设置不同有时候会出现关于字符的问题
报错方式一般是(XX字符失效等等)
方法一:可以在xml文件中加入
//引入依赖
<!-- <properties>-->
<!-- <!– 设置默认编码 –>-->
<!-- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>-->
<!-- </properties>-->
方法二:将xml文件中的UTF-8改为UTF8
3️⃣,关于空指针异常的问题。
自行百度,错误方式多种多样。
4️⃣
关于log4j.properties配置文件,即日志
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
以上是入门案例
用Mybatis实现CRUD,增删改查
要实现这个功能只需要在实现完入门案例之后,增加接口中的方法,增加接口实现类中的sql语句,在测试类中增加测试方法
这是接口中的抽象方法
接下来要在接口实现类中添加sql语句
select:查
</select><select id="getUserByID" parameterType="int" resultType="mybatis.pojo.User"> select * from mysql1.student where id = #{id};</select>
id:就是对应namespace中方法的名字
resultType:sql语句执行的返回值
parameterType:参数类型
insert:增
<insert id="addUser" parameterType="mybatis.pojo.User"> insert into mysql1.student(id, name, emain, age) values(#{id},#{name},#{emain},#{age})</insert>
update:改
<update id="upDate" parameterType="mybatis.pojo.User"> update mysql1.student set name=#{name},emain=#{emain},age=#{age} where id=#{id};</update>
delete:删
<delete id="deleteUser" parameterType="int"> delete from mysql1.student where id=#{id};</delete>
接下来要在测试类中添加对应的测试方法
操作步骤类同
其中增删改一定要提交事务,即sqlSession.commit();
这样就实现了增删改查。