Mybatis1

入门步骤:

1.首先配置核心文件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>
    <properties resource="db.properties"/>
 

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>
   
</configuration>

2.创建实体类:设置属性,getset方法等。

3.创建mapper接口:用于需要存放用到的方发。

4.创建myBatis的映射文件:

ORM对象关系映射

java与数据库相对应的概念:类-->表;属性-->字段/列;对象-->记录/行

映射文件命名规则:用实现类+Mapper.xml的格式,如User----UserMapper.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.wei.mybatis.mapper.employeeMapper">

  <insert id="insertEmp">

  </insert>
   
</mapper>

当要在映射文件中添加方法时需要注意两点很重要!!!

1.namespace的引号中要填写相对应的实现接口的全类名

2.要用到的方法的id位置要与相对应的实现接口中的方法名相同

public interface employeeMapper {
    int insertEmp();
}


<mapper namespace="com.wei.mybatis.mapper.employeeMapper">

  <insert id="insertEmp">

  </insert>
   

5.在核心配置文件中引入映射文件

             <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>
//需要引入的映射文件填在mappers中
    <mappers>
        <mapper resource="mapper/employeeMapper.xml"/>
    </mappers>
</configuration>

6.创建测试类

public class MyBatisTest {
    @Test
    public void testMyBatis()throws IOException {
        //加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取mapper接口对象
        employeeMapper Mapper = sqlSession.getMapper(employeeMapper.class);
        //测试功能
        int result = Mapper.insertEmp();
        //提交事务
        sqlSession.commit();
        System.out.println("result:"+result);
    }

测试类过程可以进行优化:1.sqlSession.commit();为手动提交事务管理,可以在SqlSession sqlSession = sqlSessionFactory.openSession(true);的小括号中写true,能够自动提交事务,就可以不用commit。

查询方法(select)

注意要点 :必须设置resultType或resultMap.

resultType:设置默认的映射关系。(属性名与字段名一致时使用)

resultMap:设置自定义映射关系。(属性名与字段名不一致时使用)

---------------------------------------------------------------------------------

配置文件属性

1.environment

<!--environments:用于配置多个数据库连接环境
default:用于存放默认使用的环境的id-->
<environments default="development">
   <!--environment:配置某个具体环境
    属性:
        id:标识链接库的环境的唯一标识-->
        <environment id="development">
    <!--transactionManager:用于设置事务管理方式
    属性:
        type="JDBC\MANAEGD"
        JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动处理
        MANAEGD:被管理。
-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>

 2.properties

将properties引入核心配置文件

<properties resource="db.properties"/>

db.properties 

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&\
  characterEncoding=utf8&userUnicode=true&useSSl=false 
mysql.username=root
mysql.password=123456

 3.typeAliases

设置类型别名,方便在resultType等地方直接使用别名

例:

<typeAliases>
        <typeAlias type="com.wei.mybatis.test.pojo.employer" alias="emp"/>
    </typeAliases>

则可直接使用resultType=“emp”。

当没有设置alias时,就默认别名是实体类名employer。

--------------------------------------------

Mybatis中获取值的方式:

${}  #{}

${}本质字符串拼接,此法需要注意'单引号的使用

#{}本质占位符赋值

Mybatis获取参数值的各种情况:

1.mapper接口方法的参数为单个的字面量类型

可以通过${}和#{}以任意的字符串获取参数值,但是需要注意${}的单引号问题

<select id="GetempByemployername" resultType="com.wei.mybatis.test.mapper.employerMapper">
        select *from employer where empname = #{empname}
        select *from employer where empname ='${empname}'
    </select>

2.mapper接口方法多个参数

此时Mybatis会将这些参数放在一个map集合中,以两种方式进行存储

a>arg0,arg1...为键,以参数为值

b>param1,param2...为键,以参数为值

因此只需要通过#{}${}以键的方式访问即可,需要注意${}的单引号问题

   <select id="checkLogin" resultType="......">
        select *from t_user where username = #{arg0} and password=#{arg1}
        select *from t_user where username = #{param1} and password=#{param2}
        select *from t_user where username = #{param1} and password=#{arg2}

        select *from t_user where username ='${param1}' and password = '${param2}'
    </select>

3.当mapper接口参数有多个时,手动将这些参数放在一个map中存储。

因此只需要通过#{}${}以键的方式访问即可,需要注意${}的单引号问题

employer checkLoginByMap(Map<String,Object>map);
 <select id="checkLogin" resultType="......">
        select *from t_user where username = #{username} and password=#{password}
    
        select *from t_user where username ='${username}' and password = '${password}'
    </select>

4.mapper接口方法的参数是实体类类型的参数

通过属性名,添加属性值。

因此只需要通过#{}${}以键的方式访问即可,需要注意${}的单引号问题

int insertemployer(employer employer1);
<insert id="insertemployer">
        insert into employer values(null,#{empname},#{password},#{age},#{sex})
    </insert>

5.使用@param注解命名参数

a>以@Param注解的值为键,以参数为值

b>以param1,param2...为键,以参数为值

因此只需要通过#{}${}以键的方式访问即可,需要注意${}的单引号问题

employer checkLoginByParam(@Param("username") String username, @Param("password") String password);
}
<select id="checkLoginByParam" resultType="...">
        select * from employer where username = #{username} and password = #{password}
    </select>

---------------------------------------------------------

Mybatis各种查询功能

1.若查询出的数据只有一条,可以通过实体类对像或集合接收。

2.若查询的数据有多条,一定不能通过实体类对象接收,可以通过list集合来接收。

a>通过实体类类型的list集合接收

b>通过map类型的list集合接收

c>可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某个字段的值作为键,放在同一个map集合中。

public interface departmentMapper {
    /*
    根据id查询用户信息
     */
    department getUserById(@Param("id") Integer id);

    /*
    查询所有用户信息
     */
    List<department> getAllUser();

   Map<String,Object> getuserByIdToMap(@Param("id") Integer id);

    /**
     * 查询所有用户信息为Map集合
     */
    List<Map<String,Object>> getAllUserToMap();
 /**
     * 查询所有用户信息为Map集合
     *List<Map<String,Object>> getAllUserToMap();
     */
    @MapKey("id")
    Map<String,Object> getAllUserToMap();
}

-----------------------------------------------------------------------------------

Mybatis模糊查询

三种方式:

第二种concat()是拼接方式

<select id="getUserByLike" resultType="User">
        select * from t_user where username like '%${username}%'
        select * from t_user where username like concat('%',#{username},'%')
        select * from t_user where username like "%"#{username}"%"

    </select>

------------------------------------------------------

批量删除

 where in(),只能与${}配套使用。

 /**
     * 批量删除
     */
    int deleteMore(@Param("ids") String ids);
//此处的ids是多个id的集合
<delete id="deleteMore">
        delete from t_user where id in(${ids})
    </delete>

动态获取表名

 /**
     * 查询指定表中的数据
     */
    List<department> getUserByTableName(@Param("tableName") String tableName);
 <select id="getUserByTableName" resultType="department">
        select * from ${tablename}
    </select>

获取自增的主键

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into t_user values (null ,#{username},#{password},#{age},#{sex},#{email})
    </insert>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值