mybatis核心配置文件
<?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/><!-= 属性 -->
<settings /><!-- 设置 -->
<typeAliases /><!-- 类型命名-->
<typeHandlers /><!-- 类型处器-->
<cobjectFactory /><!-- 对象工厂-->
<plugins /><!-- 插件-->
<environments><!-- 配置环境-->
<environment><!-- 环境变量 -->
<transactionManager /><!-- 事务管理器 -->
<datasource /><!-- 数据源-->
</environment>
</environments>
<databaseIdprovider /><!-- 数据厂商标识 -->
<mappers /><!-- 射器 -->
</configuration>
<?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>
<environments default="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://127.0.0.1:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="oracle">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.dao.UserDao"></mapper>
</mappers>
</configuration>
创建实体类
package com.bean;
public class ClassInfo {
private Integer cid;
private String cname;
private String cinfo;
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getCinfo() {
return cinfo;
}
public void setCinfo(String cinfo) {
this.cinfo = cinfo;
}
@Override
public String toString() {
return "ClassInfo{" +
"cid=" + cid +
", cname='" + cname + '\'' +
", cinfo='" + cinfo + '\'' +
'}';
}
}
创建接口
package com.dao;
import com.bean.ClassInfo;
import java.util.List;
public interface UserDao {
List<ClassInfo> selectAll();
ClassInfo selectid(int cid);
int add(ClassInfo classInfo);
int delete(int cid);
}
mybatis映射文件
<?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.dao.UserDao">
<select id="selectAll" resultType="com.bean.ClassInfo">
select * from classInfo
</select>
<select id="selectid" resultType="com.bean.ClassInfo" parameterType="int">
select * from classInfo where cid=#{cid}
</select>
<insert id="add" parameterType="com.bean.ClassInfo">
insert into classInfo(cname,cinfo) values(#{cname},#{cinfo})
</insert>
<delete id="delete" parameterType="com.bean.ClassInfo">
delete from classInfo where cid=#{cid}
</delete>
</mapper>
加载配置文件
//1.加载核心配置文件的字节输入流
InputStream stream = null;
//2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
SqlSessionFactoryBuilder builder=null;
//3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
SqlSessionFactory factory=null;
//4.通过工厂对象获取SqlSession对象----执行JDBC操作的
SqlSession sqlSession=null;
//5.通过SqlSession对象获取接口对应的代理对象
UserDao userDao=null;
@Before
public void init() throws IOException {
//1.加载核心配置文件的字节输入流
stream = Resources.getResourceAsStream("mybatis04.xml");
//2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
builder=new SqlSessionFactoryBuilder();
//3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
factory=builder.build(stream);
//4.通过工厂对象获取SqlSession对象----执行JDBC操作的
sqlSession=factory.openSession();
//5.通过SqlSession对象获取接口对应的代理对象
userDao=sqlSession.getMapper(UserDao.class);
//6.通过代理对象执行查询方法
}
关闭
@After
public void distroy() throws IOException{
sqlSession.commit();
sqlSession.close();
stream.close();
}
全查
//全查
@Test
public void testselect(){
List<ClassInfo> userList= userDao.selectAll();
for (ClassInfo classInfo:userList){
System.out.println(classInfo);
}
}
单查
@Test
public void testid(){
ClassInfo classInfo=userDao.selectid(101);
System.out.println(classInfo);
}
新增
//添加
@Test
public void testadd(){
ClassInfo classInfo=new ClassInfo();
classInfo.setCname("xx");
classInfo.setCinfo("xx");
int a=userDao.add(classInfo);
if (a>0){
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
}
删除
//删除
@Test
public void testdede(){
int a=userDao.delete(104);
if (a>0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}
修改
接口
int update(Student student);
mybatis映射文件
<update id="update" parameterType="com.zhao.bean.Student">
update student set name=#{name},age=#{age},gender=#{gender},score=#{score} where id=#{id};
</update>
测试类
@Test
public void testUpdate(){
//1.数据回显
Student olduser = studentDao.selectById(3);
System.out.println("修改前:"+olduser);
//2.根据需要修改字段值
olduser.setName("lisa");
olduser.setAge(18);
olduser.setGender("女");
olduser.setScore(99);
//3.执行数据库更新
studentDao.update(olduser);
//4.再次查询
Student student=studentDao.selectById(3);
System.out.println("修改后:"+student);
}
一对多
接口
package com.chen.bean;
import java.util.List;
public class Dept {
private Integer did;
private String dname;
private String dinfo;
//一个部门包含多个员工,一对多关系就是定义集合
List<Emp> emps;
public List<Emp> getEmps() {
return emps;
}
public void setEmps(List<Emp> emps) {
this.emps = emps;
}
public Integer getDid() {
return did;
}
public void setDid(Integer did) {
this.did = did;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getDinfo() {
return dinfo;
}
public void setDinfo(String dinfo) {
this.dinfo = dinfo;
}
@Override
public String toString() {
return "Dept{" +
"did=" + did +
", dname='" + dname + '\'' +
", dinfo='" + dinfo + '\'' +
", emps=" + emps +
'}';
}
}
package com.chen.bean;
public class Emp {
private Integer eid;
private String ename;
private String job;
private Double sal;
private String phone;
private String address;
private Integer did;
public Integer getEid() {
return eid;
}
public void setEid(Integer eid) {
this.eid = eid;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Double getSal() {
return sal;
}
public void setSal(Double sal) {
this.sal = sal;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getDid() {
return did;
}
public void setDid(Integer did) {
this.did = did;
}
@Override
public String toString() {
return "Emp{" +
"eid=" + eid +
", ename='" + ename + '\'' +
", job='" + job + '\'' +
", sal=" + sal +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
", did=" + did +
'}';
}
}
创建接口
package com.chen.dao;
import com.chen.bean.Dept;
public interface DeptDao {
Dept selectByDid(int did);
}
package com.chen.dao;
import com.chen.bean.Emp;
import java.util.List;
public interface EmpDao {
Emp selectByEid(int eid);
List<Emp> selectByDid(int did);
}
配置映射文件
<?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.chen.dao.DeptDao">
<resultMap id="deptMap" type="com.chen.bean.Dept">
<id property="did" column="did" />
<result property="dname" column="dname"/>
<result property="dinfo" column="dinfo"/>
<!--配置一对多关系:手动映射配置-->
<collection property="emps" ofType="com.chen.bean.Emp">
<id property="eid" column="eid" />
<result property="ename" column="ename" />
<result property="job" column="job" />
<result property="sal" column="sal" />
<result property="phone" column="phone" />
<result property="address" column="address" />
</collection>
</resultMap>
<select id="selectByDid" parameterType="int" resultMap="deptMap">
select * from dept inner join emp on dept.did=emp.did where dept.did=#{did};
</select>
</mapper>
mybatis映射文件
<?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.chen.dao.DeptDao">
<resultMap id="deptMap" type="com.chen.bean.Dept">
<id property="did" column="did" />
<result property="dname" column="dname"/>
<result property="dinfo" column="dinfo"/>
<!--配置一对多关系:自动根据did去关联查询emp表中该did的信息-->
<collection column="did" select="com.chen.dao.EmpDao.selectByDid" property="emps">
</collection>
</resultMap>
<select id="selectByDid" parameterType="int" resultMap="deptMap">
select * from dept where did=#{did};
</select>
</mapper>
<?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.chen.dao.EmpDao">
<select id="selectByEid" parameterType="int" resultType="emp">
select * from emp where eid=#{eid}
</select>
<select id="selectByDid" parameterType="int" resultType="emp">
select * from emp where did=#{did}
</select>
</mapper>
测试类
package com.chen.test;
import com.chen.bean.Dept;
import com.chen.dao.DeptDao;
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 java.io.IOException;
import java.io.InputStream;
public class DeptTest {
InputStream stream=null;
SqlSessionFactoryBuilder builder=null;
SqlSessionFactory factory=null;
SqlSession sqlSession=null;
DeptDao deptDao=null;
@Before
public void init() throws IOException {
stream= Resources.getResourceAsStream("mybatis.xml");
builder=new SqlSessionFactoryBuilder();
factory=builder.build(stream);
sqlSession=factory.openSession();
deptDao=sqlSession.getMapper(DeptDao.class);
}
@Test
public void testSelectByDid(){
Dept dept = deptDao.selectByDid(101);
System.out.println(dept);
}
@After
public void distroy() throws IOException {
sqlSession.commit();
sqlSession.close();
stream.close();
}
}
package com.chen.test;
import com.chen.bean.Emp;
import com.chen.dao.EmpDao;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class EmpTest {
InputStream stream=null;
SqlSessionFactoryBuilder builder=null;
SqlSessionFactory factory=null;
SqlSession sqlSession=null;
EmpDao empDao=null;
@Before
public void init() throws IOException {
stream= Resources.getResourceAsStream("mybatis.xml");
builder=new SqlSessionFactoryBuilder();
factory=builder.build(stream);
sqlSession=factory.openSession();
empDao=sqlSession.getMapper(EmpDao.class);
}
@Test
public void testSelectByEid(){
Emp emp = empDao.selectByEid(2);
System.out.println(emp);
}
@After
public void distroy() throws IOException {
sqlSession.commit();
sqlSession.close();
stream.close();
}
}
一对一
配置文件
<?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.chen.dao.EmpDao">
<!--定义手动映射关系:数据库中字段 和 类的属性 的映射-->
<resultMap id="empMap" type="com.chen.bean.Emp">
<id property="eid" column="eid" />
<result property="ename" column="ename" />
<result property="job" column="job" />
<result property="sal" column="sal" />
<result property="phone" column="phone" />
<result property="address" column="address" />
<!--一对一的映射配置association: 手动映射配置emp中 dept对象中的属性和表字段的对应关系-->
<association property="dept" javaType="com.chen.bean.Dept">
<id property="did" column="did"/>
<result property="dname" column="dname"/>
<result property="dinfo" column="dinfo"/>
</association>
</resultMap>
<select id="selectBuEid" parameterType="int" resultMap="empMap">
select * from emp inner join dept on emp.did=dept.did where eid=#{eid};
</select>
</mapper>
测试
package com.chen.test;
import com.chen.bean.Dept;
import com.chen.dao.DeptDao;
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 java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class DeptTest {
InputStream stream=null;
SqlSessionFactoryBuilder builder=null;
SqlSessionFactory factory=null;
SqlSession sqlSession=null;
DeptDao deptDao=null;
@Before
public void init() throws IOException {
stream= Resources.getResourceAsStream("mybatis.xml");
builder=new SqlSessionFactoryBuilder();
factory=builder.build(stream);
sqlSession=factory.openSession();
deptDao=sqlSession.getMapper(DeptDao.class);
}
@Test
public void testSelectByDid(){
Dept dept = deptDao.selectByDid(101);
System.out.println(dept);
}
@After
public void distroy() throws IOException {
sqlSession.commit();
sqlSession.close();
stream.close();
}
}
package com.chen.test;
import com.chen.bean.Emp;
import com.chen.dao.EmpDao;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class EmpTest {
InputStream stream=null;
SqlSessionFactoryBuilder builder=null;
SqlSessionFactory factory=null;
SqlSession sqlSession=null;
EmpDao empDao=null;
@Before
public void init() throws IOException {
stream= Resources.getResourceAsStream("mybatis.xml");
builder=new SqlSessionFactoryBuilder();
factory=builder.build(stream);
sqlSession=factory.openSession();
empDao=sqlSession.getMapper(EmpDao.class);
}
@Test
public void testSelectByeid(){
Emp emp = empDao.selectBuEid(2);
Emp emp1 = empDao.selectBuEid(2);
System.out.println(emp);
System.out.println(emp1);
}
@Test
public void testSelectAll(){
List<Emp> empList = empDao.selectAll();
for (Emp emp : empList) {
System.out.println(emp);
}
}
@After
public void distroy() throws IOException {
sqlSession.commit();
sqlSession.close();
stream.close();
}
}