MyBatis(一)实例一

log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# File output...
# log4j.appender.stdout=org.apache.log4j.FileAppender
# log4j.appender.stdout.File=log.txt
# log4j.appender.stdout.Append=true
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss}  [%p] [%t] - %m%n

mybatis.cfg.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>
	<!-- 配置当前数据库环境(信息),default用来指定当前默认的数据库环境 -->
	<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_db" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	<!-- 加载sql映射文件 -->
    <mappers>
		<mapper resource="com/sxt/mapper/EmployeeMapper.xml" />
	</mappers>
</configuration>

dao

package com.sxt.dao;

import java.util.List;

import com.sxt.domain.Employee;

public interface EmployeeDao {
     //插入
	int  insert(Employee  emp);
	
	//修改
	int update(Employee  emp);
	
	//删除
	int delete(int  eid);
	//查询单个记录
	Employee  queryById(int eid);
	//全查询
	List<Employee> queryAll();
	
	//查询指定性别,且工资大于等于指定参数的员工信息
	//List<Employee>  queryByCondition(String sex,int salary);
	
}

dao.impl

package com.sxt.dao.impl;

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.apache.log4j.Logger;

import com.sxt.dao.EmployeeDao;
import com.sxt.domain.Employee;
import com.sxt.util.MyBatisUtil;

public class EmployeeDaoImpl implements EmployeeDao {
	// 日志器
	Logger logger = Logger.getLogger(EmployeeDaoImpl.class);

	@Override
	public int insert(Employee emp) {
		// TODO Auto-generated method stub
		// 返回值
		int i = 0;
		String resource = "mybatis.cfg.xml";
		InputStream inputStream = null;
		SqlSession session = null;
		try {
			// 加载主配置文件
			inputStream = Resources.getResourceAsStream(resource);
			// 创建sqlSessionFactory对象
			SqlSessionFactory factory = new SqlSessionFactoryBuilder()
					.build(inputStream);
			// 获取SqlSession对象,相当于Connection
			session = factory.openSession();
			// 调用insert()方法,去执行sql映射文件中的sql标签(statement对象)
			// 参数1:sql标签即statement的唯一标识,用namespace.sql标签的id
			// 参数2:执行sql命令时的输入参数

			i = session.insert("com.sxt.mapper.EmpMapper.addEmp", emp);
			// 输出日志
			logger.info("i=" + i);
			// 提交事务
			session.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			// 回滚事务
			session.rollback();
		} finally {
			// 关闭sqlSession对象
			session.close();
		}
		return i;
	}

	@Override
	public int update(Employee emp) {
		// TODO Auto-generated method stub
		// 获取sqlSession对象
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		int i = sqlSession.update("com.sxt.mapper.EmpMapper.updateEmp", emp);
		// 输出日志
		logger.info("i=" + i);
		// 提交事务
		sqlSession.commit();
		// 关闭sqlSession对象
		sqlSession.close();
		return i;
	}

	@Override
	public int delete(int eid) {
		// 获取sqlSession对象
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		int i = sqlSession.delete("com.sxt.mapper.EmpMapper.deleteEmp", eid);
		// 输出日志
		logger.info("i=" + i);
		// 提交事务
		sqlSession.commit();
		// 关闭sqlSession对象
		sqlSession.close();
		return i;
	}

	@Override
	public Employee queryById(int eid) {
		// TODO Auto-generated method stub
		// 获取sqlSession对象
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		Employee emp = sqlSession.selectOne(
				"com.sxt.mapper.EmpMapper.queryEmpById", eid);
		// 关闭sqlSession对象
		sqlSession.close();
		return emp;
	}

	@Override
	public List<Employee> queryAll() {
		// TODO Auto-generated method stub
		// 获取sqlSession对象
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		List<Employee> empList = sqlSession
				.selectList("com.sxt.mapper.EmpMapper.queryAll");
		// 关闭sqlSession对象
		sqlSession.close();
		return empList;
	}


}

domain

package com.sxt.domain;
/**
 * 员工实体类
 * @author lujun
 *
 */
public class Employee {
  private Integer eid;
  private String ename;
  private String sex;
  private Integer  salary;
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 getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
public Integer getSalary() {
	return salary;
}
public void setSalary(Integer salary) {
	this.salary = salary;
}
@Override
public String toString() {
	return "Employee [eid=" + eid + ", ename=" + ename + ", sex=" + sex
			+ ", salary=" + salary + "]";
}
  
}

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.sxt.mapper.EmpMapper">
  <!-- 
     namespace:sql映射文件的命名空间(唯一),区分不同的sql映射文件
     光标停在标签上,content-Model:描述可以有哪些子标签,以及先后顺序,a,b:a在b前面  a|b:a和b没有先后顺序
     *:子标签出现0或任意个  +:1个或多个
     id:标签的唯一标识,如果是DML/DQL标签,id表示Statement唯一标识
   -->
   <!-- DML操作标签 insert、update,delete
      parameterType:sql命令要绑定的参数类型,必须是全限定名,参数是javaBean对象不能省略parameterType
      参数是简单类型(非javaBan对象)时,可以省略parameterType
      resultType:sql命令返回的结果类型 ,DML操作可以省略resultType;查询操作不能省略resultType;
       如果返回的是对象,则resultType是类的全限定名;如果返回对象的集合,则resultType是集合中元素的类型(全限定名)
      
      useGeneratedKeys:是否使用自动增长的主键
      #{xx}:占位符,用于接收传进来的值,如果参数是对象,则xx就是对象中的属性名,mybatis会调用该xx属性对应的getXxx().
      如果参数是简单类型的且只有1个参数,则xx可以任意写(符合java命名规范即可)
      
   -->
   <insert id="addEmp"  parameterType="com.sxt.domain.Employee"  useGeneratedKeys="true">
  <!--     insert into t_employee(ename,sex,salary) values(#{ename},#{sex},#{salary}) -->
                                                          
         insert into t_employee(ename,sex,salary) values('${ename}','${sex}',${salary})
   </insert>
   <update id="updateEmp" parameterType="com.sxt.domain.Employee">
      update t_employee set ename=#{ename},sex=#{sex},salary=#{salary} where  eid=#{eid}
   </update>
  
     <delete id="deleteEmp"  parameterType="int">
        delete from t_employee where eid=#{sid}
     </delete>
     <select id="queryEmpById"  resultType="com.sxt.domain.Employee">
    <!--    select *  from t_employee where eid=#{sid} -->
        select *  from t_employee where eid=${value}
     </select>
     
     <select id="queryAll"  resultType="com.sxt.domain.Employee">
       select *  from t_employee
     </select>
     
 <!--     <select id="queryByCondition" resultType="com.sxt.domain.Employee">
     select *  from t_employee  where sex=#{param1} and salary>=#{salary}
     </select> -->

</mapper>

test

package com.sxt.test;

import java.util.List;

import org.junit.Test;

import com.sxt.dao.EmployeeDao;
import com.sxt.dao.impl.EmployeeDaoImpl;
import com.sxt.domain.Employee;

public class MyBatisCrudTest {
	@Test
	public void test1() {
		// 调用Dao中的insert方法
		EmployeeDao empDao = new EmployeeDaoImpl();
		Employee emp = new Employee();
		emp.setEname("周芷若");
		emp.setSalary(8000);
		emp.setSex("女");
		empDao.insert(emp);
	}

	@Test
	public void test2() {
		// 调用Dao中的insert方法
		EmployeeDao empDao = new EmployeeDaoImpl();
		Employee emp = new Employee();
		emp.setEid(5);
		emp.setEname("杨逍");
		emp.setSalary(7500);
		emp.setSex("男");
		empDao.update(emp);
	}

	@Test
	public void test3() {
		// 调用Dao中的delete方法
		EmployeeDao empDao = new EmployeeDaoImpl();
		Employee emp = new Employee();

		empDao.delete(2);
	}

	@Test
	public void test4() {
		// 调用Dao中的queryById方法
		EmployeeDao empDao = new EmployeeDaoImpl();
		Employee emp = empDao.queryById(5);
		System.out.println(emp);
	}

	@Test
	public void test5() {
		// 调用Dao中的queryAll方法
		EmployeeDao empDao = new EmployeeDaoImpl();
		List<Employee> emplist = empDao.queryAll();
		for (Employee emp : emplist) {
			System.out.println(emp);
		}

	}

	/*// 测试传入多个简单参数的查询
	@Test
	public void test6() {
		// 调用Dao中的delete方法
		EmployeeDao empDao = new EmployeeDaoImpl();
		List<Employee> emplist = empDao.queryByCondition("男", 7500);
		for (Employee emp : emplist) {
			System.out.println(emp);
		}

	}*/

}

util

package com.sxt.util;

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

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

/**
 * mybatis工具类
 * 
 * @author lujun
 * 
 */
public class MyBatisUtil {

	private static SqlSessionFactory sqlSessionFactory;
	static {
		String resource = "mybatis.cfg.xml";
		InputStream inputStream = null;
		// 加载主配置文件
		try {
			inputStream = Resources.getResourceAsStream(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder()
					.build(inputStream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static SqlSession getSqlSession() {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		return sqlSession;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41532872/article/details/88140075