Mybatis的基础入门二

一、传统Mybatis Dao的开发模式

开发步骤

项目结构如下图:
在这里插入图片描述

  • 1.使用原有的use.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">
<!--namespace命名空间,用于隔离sql语句,后续有重要作用 -->
<mapper namespace="user">
<!--id是sql语句的唯一标志 parameterType入参的数据类型 resultType是返回的数据类型 -->
<select id="getUserById" parameterType="int"
	resultType="mybatis.pojo.User">
	select*from user where id=#{id}
	<!-- #{}:占位符,相当于在JDBC中的? -->
</select>

<select id="getUserByUserName" parameterType="String"
	resultType="mybatis.pojo.User">
	select*from user where username LIKE '%${value}%'
	<!--${} :是字符串拼接指令,如果入参是普通类型,{}内部只写value -->
</select>

   <!--插入用户的操作  -->
   <!-- 
   useGeneratedKeys:主键自增
   keyProperty:主键是哪个
    -->
<insert id="insertUser" parameterType="mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
<!--  
selectKey:主键返回
keyProperty:user中主键的属性
resultType:主键的数据类型
order:指定selectKey何时执行,after在插入数据后进行执行
-->
   <!--
   <selectKey keyProperty="id" resultType="int" order="AFTER" >
select last_insert_id()
</selectKey> 
-->
	insert into `user`(`username`,`birthday`,`sex`,`address`)
	values(#{username},#{birthday},#{sex},#{address})
</insert>

<!--更新用户 -->
<update id="updateUser" parameterType="mybatis.pojo.User" >
update `user` set `username`=#{username} where `id`=#{id}
</update>

<!--删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from `user` where `id`=#{id}
</delete>
</mapper>
  • 2.新建个UserDao接口
package mybatis.dao;
import java.util.List;
import mybatis.pojo.User;

//用户持久化接口
public interface UserDao {
//根据用户ID来查询用户信息
	User getUserById(Integer id);

//根据用户名查找
	List<User> getUserByUserName(String userName);

//	添加用户
	void insertUser(User user);
}
  • 3.新建一个实现UserDao接口的实现类UserDaoImpl
package mybatis.daoImpl;

import java.util.List;
import org.apache.ibatis.session.SqlSession;
import mybatis.dao.UserDao;
import mybatis.pojo.User;
import mybatis.utils.SqlSessionFactoryUtils;

//用户持久化实现
public class UserDaoImpl implements UserDao {

@Override
public User getUserById(Integer id) {
	SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
	User user = sqlSession.selectOne("user.getUserById", id);
	sqlSession.close();
	return user;
}

@Override
public List<User> getUserByUserName(String userName) {
	SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
	List<User> list = sqlSession.selectList("user.getUserByUserName", userName);
	sqlSession.close();
	return list;
}

@Override
public void insertUser(User user) {
	SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(true);
	sqlSession.insert("user.insertUser", user);
	//在open Session中设置true则不需要下面
	//sqlSession.commit();
	sqlSession.close();
}
}
  • 4.编写测试类
package mybatis.test;

import java.util.Date;
import java.util.List;
import org.junit.Test;
import mybatis.dao.UserDao;
import mybatis.daoImpl.UserDaoImpl;
import mybatis.pojo.User;

public class UserDaoTest {

@Test
public void testGetUserById() {
	UserDao userDao = new UserDaoImpl();
	User user = userDao.getUserById(27);
	System.out.println(user);
}

@Test
public void testGetUserByUserName() {
	UserDao userDao = new UserDaoImpl();
	List<User> userName = userDao.getUserByUserName("张");
	for (User user : userName) {
		System.out.println(user);
	}
}

@Test
public void testInsertUser() {
	UserDao userDao = new UserDaoImpl();
	//new 一个User对象,并向其中存入一条数据
	User user = new User();
	user.setUsername("张飞66");
	user.setSex("1");
	user.setBirthday(new Date());
	user.setAddress("上海体育学院");
	// 插入方法insert
	userDao.insertUser(user);
}

}

二、接口动态代理模式DAO开发模式

1.映射文件中开发规则:
  • 1.namespace必须是接口的全路径名
  • 2.接口的方法名必须与映射文件中sql-id一致
  • 3.接口的输入参数类型与映射文件中parameterType类型一致
  • 4.接口的返回值类型必须与映射文件中resultType类型一致
2.动态代理开发步骤
  • 1.创建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">
<!--
动态代理开发规则
1.namespace必须是接口的全路径名
2.接口的方法名必须与sql中id一致
3.接口的入参与parameterType类型一致
4.返回值类型必须与resultType类型一致
  -->
<mapper namespace="mybatis.mapper.UserMapper">

	<!-- 查询ID -->
    <!--id是sql语句的唯一标志 parameterType入参的数据类型 resultType是返回的数据类型 -->
	<select id="getUserById" parameterType="int" resultType="mybatis.pojo.User">
		select*from user where id=#{id}
	</select>
  
   <!-- 查询用户名 -->
	<select id="getUserByUserName" parameterType="String" resultType="mybatis.pojo.User">
		select*from user where username LIKE '%${value}%'
	</select>

    <!--插入用户的操作  -->
   <insert id="insertUser" parameterType="mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
		insert into `user`(`username`,`birthday`,`sex`,`address`)
		values(#{username},#{birthday},#{sex},#{address})
	</insert>	
</mapper>
  • 2.创建UserMapper接口
package mybatis.mapper;

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

public interface UserMapper {
//根据用户ID来查询用户信息
	User getUserById(Integer id);

//根据用户名查找
	List<User> getUserByUserName(String userName);

//	添加用户
	void insertUser(User user);
}
  • 3.在SqlMapConfig.xml中映射UserMapper.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>
	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="123" />
			</dataSource>
		</environment>
	</environments>
	<!-- 加载映射文件 -->
	<mappers>
	<mapper resource="mybatis/user.xml"></mapper>
	<mapper resource="mybatis/userMapper.xml"></mapper>
	</mappers>
</configuration>
  • 4.加载UserMapper.xml
package mybatis.test;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import mybatis.mapper.UserMapper;
import mybatis.pojo.User;
import mybatis.utils.SqlSessionFactoryUtils;

public class UserMapperTest {

	@Test
	public void testGetUserById() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		User user = userMapper.getUserById(30);
		System.out.println(user);
		sqlSession.close();
	}

	@Test
	public void testGetUserByUserName() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		List<User> list = userMapper.getUserByUserName("张");
		for (User user : list) {
			System.out.println(user);
		}
	}

	@Test
	public void testInsertUser() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		User user = new User();
		user.setUsername("赵强");
		user.setSex("1");
		user.setBirthday(new Date());
		user.setAddress("上海体育学院");
		userMapper.insertUser(user);
		sqlSession.commit();
		sqlSession.close();
	}
}

SqlMapConf.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>
	<!--先加载内部标签,再加载外部文件,名称一致时,会替换内容 -->
	<properties resource="jdbc.properties">
		<property name="jdbc.username" value="root" />
		<property name="jdbc.password" value="123" />
	</properties>

	<!--单个别名定义,别名的使用,不区分大小写 -->
	<typeAliases>
		<typeAlias type="mybatis.pojo.User" alias="user" />
		<!-- 别名包扫描,不区分大小写,推荐使用 -->
		<package name="mybatis.pojo" />
	</typeAliases>

	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	<!-- 映射器加载映射文件 -->
	<mappers>
		<mapper resource="mybatis/user.xml"></mapper>
		<mapper resource="mybatis/userMapper.xml"/>
		<!-- 映射文件,class扫描器: 1.接口文件必须与映射文件在同一目录 2.接口文件必须与映射文件名称一致 -->
		<!-- <mapper class="mybatis.mapper.UserMapper" /> -->
		<!--映射文件包扫描 1.接口文件必须与映射文件在同一目录 2.接口文件名称必须与映射文件的名称一致 -->
		<!-- <package name="mybatis.mapper"/> -->
	</mappers>
</configuration>

jdbc中的属性配置

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123

猜你喜欢

转载自blog.csdn.net/xiayubao7788/article/details/92402717