java ssm框架学习——mybatis--1

来源:互联网 发布:mac pro使用攻略 编辑:程序博客网 时间:2024/06/06 03:28

MyBatis

1.  MyBatis介绍

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。     MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。


MyBatis快速入门

1.1. 导入myBatis jar包

1.1.1.  配置MyBatis核心配置文件SqlMapConfig.xml
<?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>
    <!-- 关联数据库jdbc -->
    <properties resource="db.properties"></properties>
    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <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>
</configuration>

 

1.2. 配置db.properties文件

 

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/myfirstdb?characterEncoding\=utf-8
jdbc.username=root
jdbc.password=root

1.3. 配置log4j.properties文件

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

1.4. 创建bean类

public class User {
private Integer id;
private String username;
private String password;
private String sex;

2.  测试

2.1. 配置bean.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:命名空间,做sql隔离 -->
<mapper namespace="test">
</mapper>

 

2.2. 配置文件中添加引用

<mappers>
<mapper resource="com/example/batis/domain/User.xml" />
</mappers>

2.3. 测试查询

2.3.1.  bean.xml中定义查询的方法

<select id="selectUserById" resultType="com.example.batis.domain.User"
parameterType="int">
select * from t_user where id=#{id}
</select>
<select id="selectUser" resultType="user">
select * from t_user
</select>

 

2.3.2.  定义工厂测试准备方法

        // 会话工厂
private SqlSessionFactory sqlSessionFactory;
@Before
public void createSqlSessionFactory() throws IOException {
    // 配置文件
    String resource = "SqlMapConfig.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    // 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}

 

 

 

2.3.3.  测试查询单个

@Test
public void testQuery() {
    SqlSession openSession = sqlSessionFactory.openSession();
    User user = openSession.selectOne("test.selectUserById", 5);
    System.out.println(user.toString());
    openSession.close();
}

 

 

 

2.3.4.  测试查询所有

@Test
public void testQueryList() {
    SqlSession openSession = sqlSessionFactory.openSession();
    List<User> user = openSession.selectList("test.selectUser");
    for (User user2 : user) {
        System.out.println(user2.toString());
}
openSession.close();
}

2.3.5.  测试模糊查询

<insert id="saveUser" parameterType="com.example.batis.domain.User">
    insert into t_user
    (username,password,sex) values(#{username},#{password},#{sex});
</insert>
 
@Test
public void testInsert() {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    User user = new User("王五", "123", "男");
    sqlSession.insert("test.saveUser", user);
    sqlSession.commit();
    sqlSession.close();
}

2.3.6.  查询总结

#{}表示一个占位符号,
通过#{}可以实现preparedStatement向占位符中设置值,
自动进行java类型和jdbc类型转换,#{}括号中可以是value或其它名称
${}表示拼接sql串${}括号中只能是value。
传入的内容拼接在sql中且不进行jdbc类型转换。

parameterType:指定输入参数类型
resultType:指定输出结果类型

2.4. 测试添加

<update id="updateUser" parameterType="com.example.batis.domain.User">
update t_user set
username=#{username},password=#{password},sex=#{sex} where id=#{id}
</update>
 
@Test
public void testUpdate() {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User("王小九", "1234", "女");
user.setId(5);
sqlSession.update("test.updateUser", user);
sqlSession.commit();
sqlSession.close();
}

 

2.5. 测试修改

<delete id="deleteUser" parameterType="int" >
delete from t_user where id=#{a}
</delete>
@Test
public void testDelete() {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("test.deleteUser", 1);
sqlSession.commit();
sqlSession.close();
}

2.6. 测试删除

<delete id="deleteUser" parameterType="int" >
delete from t_user where id=#{a}
</delete>
@Test
public void testDelete() {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("test.deleteUser", 1);
sqlSession.commit();
sqlSession.close();
}

 

2.7. 插入数据并获取id

<insert id="insertUserAndgetKey" parameterType="com.example.pojo.User">
    <!--keyProperty 指定查询出的id设置到哪个字段上 resultType 结果类型 order 指定为after LAST_INSERT_ID() -->
    <selectKey keyProperty="id" resultType="int" order="AFTER">
        select
        LAST_INSERT_ID()
    </selectKey>
    insert into t_user
    (username,sex,age) values
    (#{username},#{sex},#{age});
    </insert>
 

 

 

2.8. 插入UUID类型的主键

<insert id="insertPersonUUID" parameterType="com.example.pojo.Person">
    <!-- 查询出的id对应的字段  order 必须是before  -->
    <selectKey keyProperty="id" resultType="string" order="BEFORE">
        select
        uuid()
    </selectKey>
    insert into t_person
    (id,username,sex,age) values
    (#{id},#{username},#{sex},#{age});
</insert>

阅读全文
2 0
原创粉丝点击