一、 搭建mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。MyBatis 只是一个半自动化的ORM实现,需要我们自己写sql,而不像hibernate那样,直接定义好实体与数据表的映射就行。
1. 导入jar包:
注意:画出来的那几个是用来配置batis的,其他的是写DBUtils.java用到的
2. 创建entity包,在entity包中创建实体类(UserInfo.java)
package entity;
public class UserInfo {
private Integer id;
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public UserInfo(Integer id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
public UserInfo(String name, String password) {
super();
this.name = name;
this.password = password;
}
public UserInfo() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "UserInfo [id=" + id + ", name=" + name + ", password=" + password + "]";
}
}
3. 创建配置文件(batis-config.xml)
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<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>
</configuration>
注意:
<Configuration>标签前面需要配置
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
4. 创建属性文件(db.preperties)
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=test2
password=123456
5. 在配置文件中(batis-config.xml)加载属性文件(db.preperties),为了获取属性文件中定义的值。放置<environments>前面。
<properties resource="db.properties">
</properties>
6. 创建tools包,在tools包中创建工具类(DBUtils.java)
package tools;
import java.io.IOException;
import java.io.Reader;
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 DBUtils {
private static SqlSessionFactory factory;
static {
try {
//读取配置文件
Reader reader = Resources.getResourceAsReader("batis-config.xml");
//创建SqlSessionFactory
factory=new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 打开session
* @param flag
* @return
*/
public static SqlSession getSession(boolean flag) {
return factory.openSession(flag);
}
/**
* 关闭session
* @param session
*/
public static void close(SqlSession session) {
if(session!=null) {
session.close();
}
}
/**
* 事务回滚
* @param session
*/
public static void rollback(SqlSession session) {
if(session!=null) {
session.rollback();
}
}
/**
* 事务提交
* @param session
*/
public static void commit(SqlSession session) {
if(session!=null) {
session.commit();
}
}
}
7. 创建映射文件(dao包->>UserInfoMapper接口及定义方法->>创建映射文件)
(注意:橙色的id名称就是接口中定义的方法名称,两者要一致)
<mapper namespace="dao.UserInfoMapper">
<select id="login" parameterType="UserInfo" resultMap="userInfoResult">
select * from userInfo where name=#{username} and password=#{password}
</select>
<select id="findAll" resultMap="userInfoResult">
select * from userInfo
</select>
<insert id="insert">
insert into userInfo(name,password) values(#{username},#{password})
</insert>
<update id="update" parameterType="UserInfo" >
update userInfo set name=#{username},password=#{password} where id=#{id}
</update>
<delete id="delete" parameterType="int">
delete from userInfo where id=#{id}
</delete>
</mapper>
注意:上面红色的是需要在batis-config.xml定义的别名,若不定义,则应写成:entity.UserInfo
在batis-config.xml定义别名:
<typeAliases>
<typeAlias type="entity.UserInfo" alias="UserInfo"/>
</typeAliases>
(entity.UserInfo:为包名+实体类名 UserInfo:别名)
8. 上面绿色的,若实体类中的属性与数据库的属性没有对应,则需要进行属性映射(放在<mapper>标签下面)
<resultMap type="entity.UserInfo" id="userInfoResult">
<id column="id" property="id" />
<result property="username" column="name" />
<result property="password" column="password" />
</resultMap>
注意:username是对应实体类中的属性名,而name是对应数据库中的属性名
9. 在batis-config.xml中配置mapper.xml文件
<mappers>
<mapper resource="dao/UserInfoMapper.xml"/>
</mappers>
10. 创建测试类
(1)采用select方法
@Test
public void testMybatis() {
SqlSession session = null;
try {
session = DBUtils.getSession(true);
UserInfo userInfo = new UserInfo("TOM", "123456");
UserInfo user = session.selectOne("dao.UserInfoMapper.login", userInfo);
if (user == null) {
System.out.println("登錄失敗!");
} else {
System.out.println("登錄成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
DBUtils.close(session);
}
}
}
(2)采用getMapper()方法
@Test
public void testMapper() {
SqlSession session = null;
try {
session = DBUtils.getSession(true);
UserInfo userInfo = new UserInfo("TOM", "123456");
UserInfo user = session.getMapper(UserInfoMapper.class).login(userInfo);
if (user == null) {
System.out.println("登录失败");
} else {
System.out.println("登录成功");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
DBUtils.close(session);
}
}
}
