Mybatis -基本使用

目录

简介:

一:连接Mysql

1.1 添加依赖:

1.2 resources下新建SqlMapConfig.xml文件

1.3 src/main/java下新建dao和pojo文件夹

1.4 src/test/java下新建testM进行测试

二:mybatis-generator代码生成器

2.1 配置pom

2.2 resources 下新建 GeneratorConfig.xml

三:整合spring

3.1 新建applicationContext 和 datasource.properties

3.2 新建mybatis-config.xml

3.3 加依赖

3.4 进行测试

四:动态SQL的标签

4.1 if标签:一般用来判断是否为空和是否相等

4.2 where 标签 :会自动将其后第一个条件的and或者是or给忽略掉

4.3 choose, when, otherwise 类似Java中的 switch 

4.4 foreach :  对一个集合进行遍历,通常是在构建 IN 条件语句的时候

五:开源分页插件 Page helper

5.1 添加依赖

5.2 写sql

5.3 测试分页


​​​​​​​

简介:

Mybatis: 持久层框架,消除了几乎所有的JDBC代码以及参数的手动设置,已经取代了Jdbc

一:连接Mysql

1.1 添加依赖:

<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13-beta-3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

1.2 resources下新建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>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="zhongfayi"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="dao/IUserDao.xml"/>
    </mappers>

</configuration>

1.3 src/main/java下新建dao和pojo文件夹

public class User {

    private String name;
    private Integer id;
    private Integer age;
    
    // 省略get,set和toString
    
}
public interface IUserDao {

    List<User> findAll();
}
<?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="dao.IUserDao">

    <select id="findAll" resultType="pojo.User">
        select * from user
    </select>

</mapper>

1.4 src/test/java下新建testM进行测试

public class TestM {
    @Test
    public void test() throws Exception{
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        List<User> selectList = sqlSession.selectList("findAll");
        for (User user : selectList) {
            System.out.println(user);
        }
        // 也可以使用代理对象执行方法
        IUserDao mapper = sqlSession.getMapper(IUserDao.class);
        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
        //5.释放资源
        sqlSession.close();
        in.close();
    }
}

控制台输出结果:

User{name='张三', id=1, age=1}
User{name='李四', id=2, age=2}
User{name='张三', id=1, age=1}
User{name='李四', id=2, age=2}

二:mybatis-generator代码生成器

2.1 配置pom


<build>
    <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.6</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>

2.2 resources 下新建 GeneratorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 
<generatorConfiguration>
 
    <!-- 引入本地Mysql连接 -->
    <classPathEntry location="D:\Users\mysql-connector-java-5.1.34.jar"/>
 
    <context id="mysqlgenerator" targetRuntime="MyBatis3">
 
        <!-- 实体类生成toString 方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
        <!--不生成注释-->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!-- 配置数据库连接 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test"
                        userId="root"
                        password="" />
 
        <!-- 指定javaBean生成的位置 -->
        <javaModelGenerator targetPackage="org.pojo" targetProject="src/main/java" >
            <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
            <property name="enableSubPackages" value="true" />
            <!-- 是否对model添加 构造函数 -->
            <property name="constructorBased" value="true"/>
        </javaModelGenerator>
 
        <!--指定sql映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="org.dao" targetProject="src/main/resources" >
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- 指定dao接口生成的位置,mapper接口 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="org.dao" targetProject="src/main/java" >
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
 
        <!-- table表生成对应的DoaminObject -->
        <table tableName="sys_user" domainObjectName="SysUser"></table>
        
        <!-- 不生成Example -->
        <!--<table tableName="mmall_cart" domainObjectName="Cart" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
 
 
</context>
 
</generatorConfiguration>

三:整合spring

3.1 新建applicationContext 和 datasource.properties

<?xml version="1.0" encoding="UTF-8" ?>
 
 
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.3.xsd">
 
    <!--读取db.properties -->
    <context:property-placeholder location="classpath:datasource.properties"/>
 
    <!-- 配置数据源 -->
    <bean id="dataSource"
          class="com.alibaba.druid.pool.DruidDataSource">
        <!--数据库驱动 -->
        <property name="driverClassName" value="${jdbc.driver}" />
        <!--连接数据库的url -->
        <property name="url" value="${jdbc.url}" />
        <!--连接数据库的用户名 -->
        <property name="username" value="${jdbc.username}" />
        <!--连接数据库的密码 -->
        <property name="password" value="${jdbc.password}" />
    </bean>
 
    <!-- 事务管理器,依赖于数据源 -->
    <bean id="transactionManager" class=
            "org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
 
    <!--开启事务注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
 
    <!--配置MyBatis工厂 -->
    <bean id="sqlSessionFactory"
          class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源 -->
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="mybatis-config.xml"/>
    </bean>
    <!--配置userMapper对象-->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="org.dao.SysUserMapper"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
 
</beans>
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
jdbc.username=zhongfayi
jdbc.password=123456

3.2 新建mybatis-config.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>
    <!--配置别名 -->
    <typeAliases>
        <package name="com.org.pojo"/>
    </typeAliases>
    <!--配置Mapper的位置 -->
    <mappers>
        <mapper resource="org/dao/SysUserMapper.xml"/>
    </mappers>
</configuration>

3.3 加依赖


<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13-beta-3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.1.6</version>
        </dependency>
 
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.21</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework.version}</version>
            <scope>test</scope>
        </dependency>
 
    </dependencies>

3.4 进行测试

@Test
    public void testSelectByPrimaryKey() throws IOException {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        SysUserMapper userMapper = (SysUserMapper)context.getBean("userMapper");
        SysUser sysUser = userMapper.selectByPrimaryKey(1);
        System.out.println(sysUser);// SysUser [Hash = 372469954, id=1, username=Admin, telephone=18612344321]
 
    }

四:动态SQL的标签

4.1 if标签:一般用来判断是否为空和是否相等


<select id="selectByName" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select
    <include refid="Base_Column_List" />
    from sys_user
    where 1 = 1
    <if test="username != null and username!=''and type == '1'.toString()">
      and username !=#{username}
    </if>
    <if test="username != null and username!='' and type == '2'.toString()">
      and username =#{username}
    </if>
  </select>

4.2 where 标签 :会自动将其后第一个条件的and或者是or给忽略掉

 <select id="selectByName" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select
    <include refid="Base_Column_List" />
    from sys_user
    <where>
      <if test="username != null and username!=''and type == '1'.toString()">
        and username !=#{username}
      </if>
      <if test="username != null and username!='' and type == '2'.toString()">
        and username =#{username}
      </if>
    </where>
  </select>

4.3 choose, when, otherwise 类似Java中的 switch 

<select id="selectTelephone" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select
    <include refid="Base_Column_List" />
    from sys_user
    <where>
      <choose>
        <when test="telephone == '1'.toString()">
          and telephone !=#{telephone}
        </when>
        <when test="telephone == '2'.toString()">
          and telephone !=#{telephone}
        </when>
        <otherwise>
          and telephone = 911
        </otherwise>
      </choose>
    </where>

4.4 foreach :  对一个集合进行遍历,通常是在构建 IN 条件语句的时候


<select id="selectIdList" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from sys_user
    <where>
      <!-- 判断集合不为空 -->
      <if test="list != null and list.size > 0">
        id in
        <foreach item="item" index="index" collection="list"
                 open="(" separator="," close=")">
          #{item}
        </foreach>
      </if>
    </where>
  </select>

五:开源分页插件 Page helper

5.1 添加依赖


<dependency>
       <groupId>com.github.pagehelper</groupId>
       <artifactId>pagehelper</artifactId>
       <version>4.1.0</version>
</dependency>

5.2 写sql

<select id="selectList" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from sys_user
</select>

5.3 测试分页

    @Test
    public void testPage(){
        // 测试分页
        int pageNum = 1; //从第几页开始
        int pageSize = 3; //每页条数
        PageHelper.startPage(pageNum, pageSize);
        List<SysUser> userList = userMapper.selectList();
        for (SysUser sysUser : userList) {
            System.out.println(sysUser);
        }
        PageInfo pageInfo = new PageInfo(userList);
        System.out.println(JSON.toJSONString(pageInfo));

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值