mybatis
概念:MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
优点
优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索
入门
1.导入相关的依赖文件,如mybatis.jar及数据库连接的的依赖
2.编写xml配置文件,配置连接数据库的基本信息
3.测试连接,及数据库的增删改查
具体的配置信息(主配置信息,放在resources里面)
<?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">
<!--1.配置连接池-->
<configuration>
<!-- 配置日志信息-->
<settings>
<setting name="logImpl" value="stdout_logging"/>
</settings>
<!--4.给所有对象取别名-->
<typeAliases>
<!-- <typeAlias type="com.qs.dt0621.domain.User" alias="User"></typeAlias>-->
<package name="domain"/><!--将此包下的所有类名当作别名-->
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/company?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--2.找到实现了接口类User的xml文件在哪?-->
<mappers>
<mapper resource="users-mapper.xml"/>
</mappers>
</configuration>
实现接口的的xml文件
<?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">
<!--namespace指定要实现的接口类
id是要实现的这个接口类的方法名
parameterType 这个方法的参数数据,此处是对象User,也可以写String,int,double
#{}里面写对象User里面的属性名,要一样。。。-->
<mapper namespace="mapper.UsersMapper">
<insert id="saveUsers" parameterType="Users">
insert into tb_users values (#{userid},#{username},#{pwd},#{status})
</insert>
<update id="updateUsers" parameterType="Users">
update tb_users set username=#{username},pwd=#{pwd},status=#{status} where userid=#{userid}
</update>
<delete id="delUsers" parameterType="Users">
delete from tb_users where userid=#{userid}
</delete>
<select id="findUsers" parameterType="Users" resultType="Users">
select * from tb_users where userid=#{userid}
</select>
</mapper>
Test测试
package Test;
import domain.Users;
import mapper.UsersMapper;
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 java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class Test {
@org.junit.Test
public void test() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mapper-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = build.openSession();
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
Users users=new Users();
users.setUserid("23");
users.setStatus("vip");
users.setUsername("shuhoa");
users.setPwd("666");
mapper.saveUsers(users);
sqlSession.commit();
}
@org.junit.Test
public void tese1() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mapper-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = build.openSession();
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
Users users=new Users();
users.setUserid("34");
users.setStatus("vipss");
users.setUsername("shuhoa");
users.setPwd("666");
mapper.delUsers(users);
sqlSession.commit();
}
@org.junit.Test
public void tese2() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mapper-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = build.openSession();
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
Users users=new Users();
users.setUserid("34");
users.setStatus("vip");
users.setUsername("shuhoa");
users.setPwd("666");
mapper.updateUsers(users);
sqlSession.commit();
}
@org.junit.Test
public void tese3() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mapper-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = build.openSession();
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
Users users=new Users();
users.setUserid("34");
users.setStatus("vip");
users.setUsername("shuhoa");
users.setPwd("666");
mapper.findUsers(users);
System.out.println(users);
sqlSession.commit();
}
}
mybatis匹配实体类与数据库字段不一致 实现类的xml的配置
<?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.qs.lianxi0623.mapper.UsersMapper">
<resultMap id="userMap" type="Q_users">
<id column="userid" property="Q_userid"></id>
<result column="username" property="Q_username"></result>
<result column="pwd" property="Q_pwd"></result>
<result column="status" property="Q_status"></result>
</resultMap>
<select id="findQ_user" parameterType="Q_users" resultMap="userMap">
select * from tb_users where userid = #{Q_userid}
</select>
</mapper>
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.qs.lianxi0623.mapper.UsersMapper">
<resultMap id="userMap" type="Q_users">
<id column="userid" property="Q_userid"></id>
<result column="username" property="Q_username"></result>
<result column="pwd" property="Q_pwd"></result>
<result column="status" property="Q_status"></result>
</resultMap>
<select id="findpage" parameterType="int" resultMap="userMap">
select * from tb_users limit #{page},3;
</select>
<select id="findpageStatus" resultMap="userMap">
select * from tb_users where status=#{status} limit #{page},3;
</select>
</mapper>
如果参数的类型不一致的情况
使用注解实现查询
@Select("select * from tb_users")
User findOne(@Param("userid") String userid, @Param("pwd") int pwd);
<mappers>
<mapper class="com.qs.mapper.UserMapper"/>
</mappers>