一、mybatis介绍:
mybatis是用来封装jdbc的一个持久层框架,它和Hibernate都属于ORM框架。但Hibernate属于完全的ORM框架,mybatis属于不完全的ORM框架。
mybatis让程序员只关注sql本身,而不去关心连接的创建,statement的创建等等其他操作。
二、HelloWorld
1.导入jar包:
a.mysql-connector-java-5.1.22-bin.jar mysql驱动包
b.mybatis-3.3.0.jar mybatis核心包
c.mybatis依赖包
2.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>
<!-- 加载java的配置文件,如db.properties -->
<properties resource="db.properties"></properties>
<!-- 省却包名 -->
<typeAliases>
<package name="com.milan.entity"/>
</typeAliases>
<!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用mybatis连接池 -->
<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>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="User.xml" />
<mapper resource="mapper/UserMapper.xml" />
</mappers>
</configuration>
3.对应的User类的配置文件
<?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:命名空间,对statement的信息进行分类管理 -->
<!-- 注意:在mapper代理时,它具有特殊及重要的作用 -->
<mapper namespace="com.milan.mapper.UserMapper"><!--dao使用test, mapper代理需要使用全路径com.milan.mapper.UserMapper -->
<!-- 根据用户ID查询用户信息 -->
<!-- select:表示一个MappedStatement对象 -->
<!-- id:statement的唯一标示 -->
<!-- #{}:表示一个占位符? -->
<!-- #{id}:里面的id表示输入参数的参数名称,如果该参数是简单类型,那么#{}里面的参数名称可以任意 -->
<!-- parameterType:输入参数的java类型 -->
<!-- resultType:输出结果的所映射的java类型(单条结果所对应的java类型) -->
<select id="findUserById" parameterType="int"
resultType="User">
SELECT * FROM t_user WHERE id =#{id}
</select>
<!-- 根据用户名称模糊查询用户列表 -->
<!-- ${}:表示一个sql的连接符 -->
<!-- ${value}:里面的value表示输入参数的参数名称,如果该参数是简单类型,那么${}里面的参数名称必须是value -->
<!-- ${}这种写法存在sql注入的风险,所以要慎用!!但是在一些场景下,必须使用${},比如排序时,动态传入排序的列名,${}会原样输出,不加解释 -->
<select id="findUserByPassword" parameterType="String"
resultType="User">
SELECT * FROM t_user WHERE password LIKE '%${value}%'
</select>
<!-- 添加语句 -->
<!-- selectKey:表示查询主键,标签内需要输入查询主键的sql -->
<!-- order:表示查询主键的sql与插入语句的sql的执行顺序
1.如果使用数据库自增,则order值为before,ID设置为int类型,不需要手动传入
2.如果使用数据库的UUID,则order值为after,ID需要设置为string类型,并且手动传入
-->
<insert id="addUser" parameterType="User">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO t_user
(username,password,idNumber,vip,score,createTime,lastLoginTime)
VALUES
(#{username},#{password},#{idNumber},#{vip},#{score},#{createTime},#{lastLoginTime})
</insert>
</mapper>
4.数据库的db.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
5.HelloWorld
@Test
public void getUserById() throws IOException{
//读取配置文件
String resource ="SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession
SqlSession sqlSession = factory.openSession();
//调用SqlSession的增删改查方法
//第一个参数表示statement的唯一标识
//第二个参数表示参数
User user = sqlSession.selectOne("test.findUserById",1);
System.out.println(user.toString());
System.out.println("===========================================");
List<User> list = sqlSession.selectList("test.findUserByPassword","111");
System.out.println(list);
sqlSession.insert("test.addUser", user);
sqlSession.commit();
sqlSession.close();
}