一、 搭建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); } } }
|