Mybatis
1.导包
数据库驱动包 mybatis驱动包
dom4j jaxen 日志包
2.写配置文件
写配置文件mybatis-config.xml 告诉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>
<!-- 引入一个资源文件 -->
<properties resource="db.properties"></properties>
<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="${pwd}"/>
</dataSource>
</environment>
</environments>
<!-- 所有的mapper文件路径 -->
<mappers>
<mapper resource="mapper/GoodsTypeMapper.xml"/>
</mappers>
</configuration>`
3.创建一个实体类
根据数据库中写一个实体类
private Integer tno;
private String tname;
private Integer status;
$$
$$
并提供getter/setter toString hashCode方法
4.写映射文件
写实体类跟数据库表中数据的映射 即sql语句的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">
<!-- 命名空间 跟java里面的作用是一样的 来避免命名冲突 -->
<mapper namespace="GoodsType">
<!-- 配置在这里的每一个sql语句 都必须指定一个唯一的ID(同一个命名空间下唯一就行) 到时候我们通过namespac.id来获取一个唯一的sql操作语句
resultType:查询语句查询后返回结果的类型 注意是一条数据对应的数据类型 不是整个结果对应的类型 db.finds(GoodsType.class) List<GoodsType>
-->
<select id="findAll" resultType="com.yc.mybatis.bean.GoodsType">
select tno, tname, status from goodstype
</select>
<select id="finds" resultType="map">
select tno, tname, status from goodstype
</select>
<select id="findByTid" resultType="com.yc.mybatis.bean.GoodsType" parameterType="map">
select tno, tname, status from goodstype where tno=#{_paramter}
</select>
<insert id="add" parameterType="com.yc.mybatis.bean.GoodsType">
insert into goodstype values(0,#{tname},#{status})
</insert>
<update id="update" parameterType="map">
update goodstype set tname=#{tname} where tno=#{tno}
</update>
</mapper>
5.测试
通过mybatis-config.xml创建一个SqlSessionFactory对象
从SqlSessionFactory中通过openSession()获取一个SqlSession对象
通过SqlSession对象执行sql语句 根据sql的id值 注意这个id值必须加上namespace
package com.yc.test;
import java.io.IOException;
import java.io.InputStream;
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 org.junit.Test;
import com.yc.mybatis.bean.GoodsType;
public class Demo01 {
private SqlSession session=null;
{
try(InputStream is = Resources.getResourceAsStream("mybatis-config.xml")){
//构建SqlSessionFactory 构建查询会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获取SqlSession
session=sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void test1(){
//通过SqlSession执行语句 第一个参数是要执行的sql语句的id 第二个参数是执行语句中的占位符的值
List<GoodsType> list=session.selectList("GoodsType.findAll");
list.forEach(System.out::println);
}
@Test
public void test2(){
//通过SqlSession执行语句 第一个参数是要执行的sql语句的id 第二个参数是执行语句中的占位符的值
List<Map<String,Object>> list=session.selectList("GoodsType.finds");
list.forEach(System.out::println);
}
@Test
public void test3(){
GoodsType type=session.selectOne("GoodsType.findByTid",101);
System.out.println(type);
}
@Test
public void test4(){
try {
int result = session.insert("GoodsType.add",new GoodsType(0,"哈哈",1));
System.out.println(result);
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally{
if(session!=null){
session.close();
}
}
}
@Test
public void test5(){
try {
Map<String,Object> map=new HashMap<String, Object>();
map.put("tname", "嘻嘻");
map.put("tno", 114);
int result=session.insert("GoodsType.update",map);
System.out.println(result);
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally{
if(session!=null){
session.close();
}
}
}
}