MyBatis---2、原生Dao开发案例

1、需求

使用Mybatis开发DAO实现以下的功能:

1、根据用户id查询一个用户信息。

2、根据用户姓名模糊查询用户信息列表。

3、添加、删除、修改用户信息。

2、具体代码

框架截图:

2、配置文件Mybatis.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"></properties>
	<!-- <typeAliases>   别名
		<typeAlias type="com.zpark.xin.zk" alias="xin"/>
		<package name="com.zpark.xin"/>   写父包,子包一起扫描,且首字母大小写都可以
	</typeAliases>  -->        
	<environments default="first">
		<environment id="first">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="${Driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="UserDao.xml"/>
	</mappers>
</configuration>

3、UserDao.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="mapper.UserMapper">
	
	<!-- 指定ID查询 -->
	<select id="query" parameterType="Integer" resultType="model.User">
		select * from student where stuId = #{value}
	</select>
	
	<!-- 名字模糊查询 -->
	<select id="mohuquery" parameterType="String" resultType="model.User">
		select * from student where stuName like '%${value}%'
		<!-- '%"#{haha}%"'   #{} 用于占位符     ${}  用于连接字符串    --> 
	</select>
	
	<!-- 插入数据 -->
	<insert id="insertDB" parameterType="model.User">
		insert into student(stuName,stuAge,stuId,stuGender) values(#{stuName},#{stuAge},#{stuId},#{stuGender});
	</insert>
	
	<!-- 修改数据 -->
	<update id="motifyDB" parameterType="test.TestDemo">
		update student set stuName=#{stuName} where stuId=#{stuId}
	</update>
	
	<!-- 删除数据 -->
	<delete id="deleteDB" parameterType="String">
		delete from student where stuName=#{value}
	</delete>
	
	
	<!-- 包装类入参 -->
	<select id="queryBao" parameterType="QueryVo" resultType="model.User">
		select * from student where stuName = "%${user.stuName}%"
	</select>
	
</mapper>

4、UserDao接口

package dao;

import java.util.List;

import model.User;

public interface UserDao {
	User queryById(int a);
	
	List<User> queryByName(String name);
}

5、UserDao的实现类UserDaoImpl

package dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import model.User;

public class UserDaoImpl implements UserDao {
	
	public SqlSessionFactory factory=null;
	public UserDaoImpl(SqlSessionFactory factoryy) {
		this.factory=factoryy;
	}
	
	@Override
	public User queryById(int id) {
		SqlSession session = factory.openSession();
		return session.selectOne("query", id);
	}

	@Override
	public List<User> queryByName(String name) {
		SqlSession session2 = factory.openSession();
		List<User> selectList = session2.selectList("mohuquery", name);
		return selectList;
	}
}

6、utils包下Factory,用于单例创建factory

package utils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Factory {
	private SqlSessionFactory factory=null;

	public SqlSessionFactory getFactory() throws IOException {
		if(factory==null) {
			InputStream in = Resources.getResourceAsStream("mybatis.xml");
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			factory =builder.build(in);
		}
		return factory;
	}	
}

7、测试类

package test;

import java.io.IOException;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

import model.User;

public class TestDemo {
	private SqlSessionFactory factory;
	
	@Before
	public void init() throws IOException {
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		InputStream in = Resources.getResourceAsStream("Mybatis.xml");
		this.factory = builder.build(in);
	}
	
	//指定ID查询
	@Test
	public void query() throws IOException {
		SqlSession session=factory.openSession();
		User selectOne = session.selectOne("dao.query",1);
		System.out.println(selectOne);
		session.close();                         //每一个session都是一个线程,不应该共用
	}
	
	//姓名模糊查询
	@Test
	public void mohuQuery() {
		SqlSession session=factory.openSession();
		List<User> selectList = session.selectList("dao.mohuquery", "王");
		for (User user : selectList) {
			System.out.println(user);
			session.close();
		}
	}
	
	//增加数据
	@Test
	public void insert() {
		SqlSession session=factory.openSession();
		User user = new User();
		user.setStuAge(11);
		user.setStuGender("女");
		user.setStuId(101);
		user.setStuName("王富贵");
		session.insert("insertDB",user);
		session.commit();
		session.close();
	}
	
	//修改数据
	@Test
	public void motify() {
		SqlSession session=factory.openSession();
		User user = new User();
		user.setStuId(1);
		user.setStuName("辛巴");
		int update = session.update("motifyDB",user);
		session.commit();
		session.close();
	}
	
	//删除数据
		@Test
		public void delete() {
			SqlSession session=factory.openSession();
			session.delete("deleteDB", "辛巴");
			session.commit();
			session.close();
		}
}

 

1.需要完成的任务 使用UserDaoImp1类和User类的相关方法,完成如下功能: (1)对空的User类对象调用getUserInfo()方法抛出的异常处理 (2)修改UserDaoImp1类,要求用户id不能修改,修改则抛出异常 (3)使用log4j输出日志信息 2.技能训练 (1)会使用try-catch-finally捕获和处理异常 (2)会使用throw和throws (3)会使用log4j记录日志 3.实践 实践一:使用try-catch进行异常处理 需求说明 (1)使用UserDaoImp1类的方法查找用户,并用User类的getUserInfo()方法输出用户信息 (2)使用一个不存在的用户名查找用户,使用try-catch对抛出的异常进行处理 实现思路及关键代码 (1)在测试类中调用UserDaoImp类的addUserUser user)方法,添加用户,然后用findUserString uName)方法查找并输出用户信息 (2)在测试类中调用UserDaoImp1类的findUserString uName)方法,使用不存在的用户名查找用户,并试图输出用户信息 (3)对抛出的异常使用try-catch进行异常处理。 实践二:使用try-catch-finally进行异常处理 需求说明 (1)对实践1的异常使用try-catch-finally进行异常处理 (2)在finally块输出是否抛出了异常 实现思路及关键代码 (1)在任务一中的代码上增加finally块 (2)为了判断在finally块输出是否抛出异常,可以设置一个变量,在catch块里修改这个变量 实践四:使用log4j 需求说明 (1)使用log4j输出日志信息 (2)查看输出日志信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值