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();
}
}