文章目录


一、注解形式开发

【MyBatis】注解形式开发&实现类形式开发_mybatis

1.在dao层接口上接着使用对应方法的注解,value值为sql语句。

package com.zyx.core.day1.dao;

import com.zyx.core.day1.domain.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;

/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 查询所有
* @return
*/
List<User> findAll();


/**
* 查询所有 --- 注解方式
* @return
*/
@Select(value = "select * from user")
List<User> findAll1();
}

2.在MyBatis主配置文件中,原来是指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件;如果是注解形式配置,应当使用功能class属性指定被注解的dao全限定类名。

<?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">

<!-- MyBatis的主配置文件 -->
<configuration>
<!--配置环境-->
<environments default="mysql">
<!-- 配置mysql的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 —— 连接池 -->
<dataSource type="POOLED">
<!-- 配置数据连接信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>

<mappers>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<!--<mapper resource="com/zyx/core/day1/dao/IUserDao.xml"></mapper>-->
<!-- 如果是注解形式配置,应当使用功能class属性指定被注解的dao全限定类名 -->
<mapper class="com.zyx.core.day1.dao.IUserDao"></mapper>
</mappers>
</configuration>

3.根据统一步骤,读取主配置文件,创建SqlSessionFactory工厂,使用工厂生产SqlSession对象,.使用SqlSession对象创建Dao接口的代理对象,最后使用代理对象执行方法。

package com.zyx.core.Test;

import com.zyx.core.day1.dao.IUserDao;
import com.zyx.core.day1.daoImpl.IUserDaoImpl;
import com.zyx.core.day1.domain.User;
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.InputStream;
import java.util.List;

public class MyBatisTest {
public static void main(String[] args) throws Exception{
// 1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
// 4.使用SqlSession对象创建Dao接口的代理对象
IUserDao iUserDao = session.getMapper(IUserDao.class);
// 5.使用代理对象执行方法 --- 使用映射文件
List<User> list = iUserDao.findAll();
for (User u:list){
System.out.println(u);
}

System.out.println("====================");

// 6.测试使用注解整合MyBatis
List<User> list1 = iUserDao.findAll1();
for (User u:list1){
System.out.println("=>"+u);
}
}
}

4.通过结果可以看出结果中获取到了信息。

返回顶部


二、实现类形式开发

1. SqlMapConfig主配置

<?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">

<!-- MyBatis的主配置文件 -->
<configuration>
<!--配置环境-->
<environments default="mysql">
<!-- 配置mysql的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 —— 连接池 -->
<dataSource type="POOLED">
<!-- 配置数据连接信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>

<!-- 测试的时候两个都可以,是应为在接口层处的@Select去掉了,如果保留了@Select后,就是注解形式,使用 2 -->
<mappers>
<!-- 1.指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mapper resource="com/zyx/core/day1/dao/IUserDao.xml"></mapper>
<!-- 2.如果是注解形式配置,应当使用功能class属性指定被注解的dao全限定类名 -->
<!--<mapper class="com.zyx.core.day1.dao.IUserDao"></mapper>-->
</mappers>
</configuration>

返回顶部


2. 映射配置

<?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.zyx.core.day1.dao.IUserDao">
<!-- 配置查询所有 -->
<!-- id写方法名 , resultType写返回类型,将查询后的结果封装到对应的实体类中-->
<select id="findAll" resultType="com.zyx.core.day1.domain.User">
select * from user;
</select>
</mapper>

返回顶部


3. 接口实现类

package com.zyx.core.day1.daoImpl;

import com.zyx.core.day1.dao.IUserDao;
import com.zyx.core.day1.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;

public class IUserDaoImpl implements IUserDao {

// 创建一个SqlSessionFactory对象
private SqlSessionFactory factory;
// 有参构造器 --- 传入工厂对象
public IUserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}

@Override
public List<User> findAll() {
// 1.使用工厂创建SqlSession对象
SqlSession session = factory.openSession();

// 2.使用session查询所有方法,锁定映射配置中的namespace中的具体id获取具体的数据库操作
// namespace、id 映射配置的作用:锁定sql语句
List<User> userList = session.selectList("com.zyx.core.day1.dao.IUserDao.findAll");

// 3.关闭资源,返回查询结果
session.close();
return userList;
}

@Override
public List<User> findAll1() {
return null;
}
}

【MyBatis】注解形式开发&实现类形式开发_sql_02

返回顶部


4.测试

package com.zyx.core.Test;

import com.zyx.core.day1.dao.IUserDao;
import com.zyx.core.day1.daoImpl.IUserDaoImpl;
import com.zyx.core.day1.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest {
public static void main(String[] args) throws Exception{

// 使用实现类的形式
// 1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 3.使用工厂创建dao对象
IUserDao iUserDao1 = new IUserDaoImpl(factory);
List<User> list1 = iUserDao1.findAll();
for (User u:list1){
System.out.println("=>"+u);
}
// 8.释放资源
in.close();
}
}

【MyBatis】注解形式开发&实现类形式开发_配置文件_03

通过映射配置文件、注解形式、实现类形式的开发对比,实现类同样可以达到预期的效果,但是相对前两者来说过程还是比较繁琐的,中间代码量较大,不利于提高开发效率。

返回顶部