MyBatis是Apache 的一个java开源项目,原名为iBatis(为Internet与abatis的结合),后因托管平台的迁移,由Goolge Code迁至Github,更名为MyBatis,MyBatis是一款支持动态SQL语句的持久框架,支持目的是让,开发者把大部分精力集中到dql开发上。
MyBatis中的sql语句可以配置在XML文件中,这避免了JDBC在java中添加的sql语句的硬编码问题。(硬编码是指,编码的可修改性差,灵活性不高);通过MyBatis提供的输入参数映射方式,经参数的配置到SQL语句的配置文件中,解决了jdbc中参数在java类中手工配制的问题。;通过MyBatis的输出映射机制,将结果集的检索自动映射成相应的java对象,避免了JDBC中对结果集的手工检索。
除此之外,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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 配置user.xml -->
<mappers>
<mapper resource="/user.xml"/>
</mappers>
</configuration>
SQL代码编写
<?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">
<!-- 接口全类名必须与命名空间形同 sql命令写在xml文件中-->
<mapper namespace="com.zzxt.spring.mvc.jurisdiction.dao.staffInfoDao">
<select id="verifyStaffId" parameterType="String" resultType="String">
select password,locked from t_sys_user where username = #{value}
</select>
<select id="userList" resultType="com.zzxt.spring.mvc.jurisdiction.entity.StaffInfo">
select * from t_sys_user
</select>
<select id="deleteStaffInfo" parameterType="int">
delete from t_sys_user where user_id = #{value}
</select>
</mapper>
DAO层对应的java文件,其中的命令在XML文件中实现
package com.zzxt.spring.mvc.jurisdiction.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.zzxt.spring.mvc.jurisdiction.entity.StaffInfo;
@Repository
public interface staffInfoDao {
//接口中的方法在user.xml文件中实现
public String verifyStaffId(String userName);
public List<StaffInfo> userList();
public StaffInfo upadateStaffInfo(int user_id);
public void deleteStaffInfo(int user_id);
}
方法的调用,sqlSession
package com.zzxt.spring.mvc.jurisdiction.dao;
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;
public class sqlSession {
public SqlSession sqlConnect() {
String res = "sqlMapConfig.xml";
System.out.println("==res===" + res);
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(res);
}catch(Exception e) {
e.printStackTrace();
}
//用SqlSessionFactoryBuilder()中的build的方法创建一个创建SqlSession的SqlSessionFactory工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//工厂方法创建session
SqlSession ss = sqlSessionFactory.openSession();
return ss;
}
}
之后可以在另一个Controllor文件中进行方法的调用。这是我其中的一个方法
@Controller
@RequestMapping("/login")
public class LoginController {
//创建封装类sqlSession的对象
sqlSession sqlOpen = new sqlSession();
@RequestMapping("/list")
public String staffList(Map<String ,Object> map) {
System.out.println("员工列表");
//链接数据库
SqlSession ss = sqlOpen.sqlConnect();
//获得方法类对象
staffInfoDao si = ss.getMapper(staffInfoDao.class);
//staffInfoDao si = ss.selectList(staffInfoDao.class);
//将员工信息存储在链表中
List<StaffInfo> listStaff = si.userList();
//System.out.println("==si.userList()=="+si.userList());
//System.out.println("====list====" + listStaff);
//利用约定大于协议,进行数据项jsp页面传递
map.put("listStaff",listStaff);
//关闭数据库
ss.close();
//跳转到staff列表页面
return "/views/stu/list.jsp";
}
仅作参考, 有错误请指教