有关mybatis的一些知识点
最近在学框架,发现学到mybatis的时候思路有点混乱,于是在这里整理一下。
- 使用mybatis的配置
- 使用mybatis实现查询
- 使用mybatis实现插入
- 使用mybatis实现更新和删除
mybatis的配置
-这里首先看一下mybatis的总配置文件
-下面还需要配置一个和bean层查询表对应的类文件的配置文件
![这是我的文件层次结构](https://img-blog.csdn.net/20170310135511950?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTWF0dHNjbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如下是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>
<!-- 这里创建一个全局变量,方便下面查询结果的使用,也就是对应类对象的小名 -->
<typeAliases>
<typeAlias type="com.bean.Admin" alias="admin" />
</typeAliases>
<!-- 这里配置连接数据库的环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:scloracle"></property>
<property name="username" value="ATM"></property>
<property name="password" value="letmein"></property>
</dataSource>
</environment>
</environments>
<!-- 下面引入和类对应的配置文件! -->
<mappers>
<mapper resource="Admin.xml"/>
</mappers>
</configuration>
以上是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.bean.Admin">
<!-- 这里定义一个结果集标签 -->
<resultMap type="com.bean.Admin" id="allAdmin">
<!-- property表示类的属性名,colum表示数据库表内的字段名 -->
<result property="adminName" column="adminname"/>
<result property="adminPass" column="adminpass"/>
</resultMap>
<!-- 这里定义一个参数的映射 ,该映射和我们的类对应-->
<parameterMap type="com.bean.Admin" id="paramAdmin">
<parameter property="adminName"/>
<parameter property="adminPass"/>
</parameterMap>
<!-- 下面可定义增删改查语句 -->
<!-- 查询所有的结果集 -->
<select id="selectAll" resultMap="allAdmin">
select * from admintable
</select>
<!-- 查询单个结果,根据传入map来查询 ,结果类型为小名-->
<select id="selectOne" resultType="admin" parameterType="Map">
select * from admintable where adminname=#{adminName}
</select>
<!-- 查询单个结果,根据传入 对象来查询,结果类型为小名,参数类型为小名 -->
<select id="selectOne2" resultType="admin" parameterType="admin">
select * from admintable where adminname=#{adminName}
</select>
<!-- 查询单个结果,根据传入类的单个属性来查询 -->
<select id="selectOne3" resultType="admin" parameterType="String">
select * from admintable where adminname=#{adminName}
</select>
<!-- 以下是插入语句 -->
<insert id="insert" parameterMap="paramAdmin">
insert into admintable values(#{adminName},#{adminPass})
</insert>
<!-- 以下是更新语句 -->
<update id="update" parameterType="admin">
update admintable set adminpass=#{adminPass} where adminname=#{adminName}
</update>
<!-- 一下是删除语句 ,传入的参数类型为之前定义的小名-->
<delete id="delete" parameterType="admin">
delete from admintable where adminname=#{adminName}
</delete>
</mapper>
-下面是相关的测试类
package com.test;
import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 com.bean.Admin;
public class Test {
String path="mybatis-config.xml";
//定义一个方法用来获取session对象
public SqlSession getSession(String configURL) throws IOException{
//获取总配置文件的输入流
Reader reader=Resources.getResourceAsReader(configURL);
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=factory.openSession();
return session;
}
//定义一个方法用来获取查询到的所有用户集合
public List<Admin> getAllAdmin(String selectId) throws IOException{
//这里mybatis自带了方法返回查询到的结果集
return this.getSession(path).selectList(selectId);
}
//定义传入参数为map方法用来查询单个用户
public Admin getOne(String selectId,Map map) throws IOException{
return this.getSession(path).selectOne(selectId, map);
}
//定义一个传入参数为对象方法来查询单个用户
public Admin getOne2(String selectId,Admin admin) throws IOException{
return this.getSession(path).selectOne(selectId, admin);
}
//定义一个传入参数为对象属性的方法来查询单个用户
public Admin getOne3(String selectId,String adminName) throws IOException{
return this.getSession(path).selectOne(selectId, adminName);
}
//定义一个传入参数为对象的方法来插入信息
public void insert(String insertId,Admin admin) throws IOException{
SqlSession session=this.getSession(path);
session.insert(insertId, admin);
session.commit();
session.close();
}
//定义一个方法传入参数为对象的方法来更新信息
public void update(String updateId,Admin admin) throws IOException{
SqlSession session=this.getSession(path);
session.insert(updateId, admin);
session.commit();
session.close();
}
//定义一个方法传入参数为对象,来删除信息
public void delete(String deleteId,Admin admin) throws IOException{
SqlSession session=this.getSession(path);
session.insert(deleteId, admin);
session.commit();
session.close();
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Test t=new Test();
/*System.out.println(t.getAllAdmin("selectAll"));*/
/*Map map=new HashMap<String, String>();
map.put("adminName","scott");
System.out.println(t.getOne("selectOne",map));*/
/*Admin admin=new Admin();
admin.setAdminName("scott");
System.out.println(t.getOne2("selectOne2", admin));*/
/*System.out.println(t.getOne3("selectOne3", "scott"));*/
/*Admin admin=new Admin("matt",123456);
t.insert("insert", admin);*/
/*Admin admin=new Admin("999",666666);
t.update("update", admin);*/
Admin admin=new Admin();
admin.setAdminName("999");
t.delete("delete", admin);
}
}
简单梳理了一下知识点,基本都是配置文件的相关配置,中间也遇到了一些bug,不过经过修改也都能解决。
这里的配置文件,只是实现简单的功能,还有很多功能未能尽善尽美,主要是把学习的东西自己回忆一下加深印象,供日后参考。
关于mybatis操作持久层还可以用注解(看起来比用配置文件方便得多)