原生访问数据库方法
总配置文件
mapper配置
mapper接口
使用示例
jdbc编程步骤:
缺点:每次对数据库操作时就得建立连接,用完又得释放,非常不方便,且对数据库造成压力较大。不灵活, 程序耦合度高。
与hibernate类似,mybatis也让表和java类产生映射关系,通过配置映射文件实现。
可创建相应实体类.xml,并在mybatis配置文件中加载(这里省略这种方法)。
注意事项:
配置建议:
别名配置typeAliases:使用批量配置,标签里加入
<package name="com.me.domain"/>
其中com.me.domain是你要自动配置的包里类的别名(用对应类名配置)
mappers映射器配置:使用批量配置,标签里加入
<package name="com.me.mapper"/>
其中com.me.mapper对应配置的mapper的包名(同上)
示例(只配置了部分配置):
<?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>
<typeAliases>
<package name="com.me.domain"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.me.mapper"/>
</mappers>
</configuration>
输入映射:
resultType指定输入参数类型:
输出映射:
resultMap需要先在mapper里配置resultMap(使用时若要用其他mapper里的resultMap配置,需要在前面加上对应mapper的namespace)示例:
<!-- 定义resultMap
将SELECT id id_,username username_ FROM USER 和User类中的属性作一个映射关系
type:resultMap最终映射的java对象类型,可以使用别名
id:对resultMap的唯一标识
-->
<resultMap type="user" id="userResultMap">
<!-- id表示查询结果集中唯一标识
column:查询出来的列名
property:type指定的pojo类型中的属性名
最终resultMap对column和property作一个映射关系 (对应关系)
-->
<id column="id_" property="id"/>
<!--
result:对普通名映射定义
column:查询出来的列名
property:type指定的pojo类型中的属性名
最终resultMap对column和property作一个映射关系 (对应关系)
-->
<result column="username_" property="username"/>
</resultMap>
使用示例:
<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
SELECT id id_,username username_ FROM USER WHERE id=#{value}
</select>
另外在接口中,返回类型写map对应实体类就OK
Mapper配置示例:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.me.mapper.GoodsMapper">
<resultMap type="goods" id="goodsResultMap">
<id column="gname_haha" property="gname" />
<result column="price_haha" property="price" />
</resultMap>
<insert id="insertGoods" parameterType="goods">
INSERT INTO GOODS(gname,price) VALUE(#{gname},#{price})
</insert>
<select id="selectall" resultMap="goodsResultMap">
SELECT gname gname_haha,price price_haha FROM goods
</select>
创建mapper.xml映射器对应的接口。
在mapper.xml中配置的方法,需要在mapper接口类里配置:
其中必须符合以下四个规范:
示例:
package com.me.mapper;
import java.util.List;
import com.me.domain.User;
import com.me.domain.UserQuery;
public interface UserMapper {
public User findUserById(Integer userid) throws Exception;
public User selectUserQuery(UserQuery userQuery) throws Exception;
public void updateUser(User user) throws Exception;
public List<User> findUserByName(String string) throws Exception;
public List<User> selectUserList(UserQuery userQuery) throws Exception;
}
示例:
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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.Before;
import org.junit.Test;
import com.me.domain.Goods;
import com.me.domain.User;
import com.me.domain.UserQuery;
import com.me.mapper.GoodsMapper;
import com.me.mapper.UserMapper;
public class Tmybati {
SqlSessionFactory sessionFactory;
//这个注解会让这个方法在test方法前执行
@Before
public void a() throws IOException {
String string="SqlMapConfig.xml";
InputStream inputStream=Resources.getResourceAsStream(string);
sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
}
//测试方法
@Test
public void tess() throws Exception {
SqlSession session=sessionFactory.openSession();
UserMapper userMapper=session.getMapper(UserMapper.class);
/*
User user2=new User();
user2.setUserid(1111);
Goods goods=new Goods();
goods.setGname("吴克");
goods.setPrice(1111);
UserQuery userQuery=new UserQuery();
userQuery.setUser(user2);
userQuery.setGoods(goods);
List<User> users=userMapper.selectUserList(userQuery);
users.stream().forEach(System.out::println);
User user=userMapper.findUserById(1111);
System.out.println(user);*/
Goods dGoods =new Goods();
dGoods.setGname("吴克5");
dGoods.setPrice(1111);
GoodsMapper goodsMapper=session.getMapper(GoodsMapper.class);
List<Goods> goods=goodsMapper.selectall();
goods.stream().filter(n->n.getPrice()==123).forEach(System.out::println);
session.commit();
session.close();
}
}