java-web的mybatis的学习

 idea开发必须是把Mapper文件与配置文件放到Resources标记的classpath目录下,eclips好像放到哪都行指定好路径就可以了,

maven里面做好配置resources的路径,不然更新依赖  工程结构标记又没了

<build>
<resources>
<resource>
<directory>src/main/java/Resources</directory>
</resource>
</resources>
</build>

1.原生使用sqlsessionFcatory去做数据库操作,很麻烦

    @Test
    public void qeryByNameTest() throws IOException {
        //加载核心配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //创造sqlsessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> list= sqlSession.selectList("user.queryByName","王五");
        for (User u:list){
            System.out.println(u.toString());
        }
        

2.使用mapper动态代理由mybatis根据你的 mapper类的接口名与映射文件里面的id名一致,指明了namespace的是哪个mapper类即可

public interface UserMapper {

    //遵循四个原则
    //接口 方法名  == User.xml 中 id 名
    //返回值类型  与  Mapper.xml文件中返回值类型要一致
    //方法的入参类型 与Mapper.xml中入参的类型要一致
    //命名空间 绑定此接口
    public User queryById(Integer id);
}

@Test
  public  void  userMapperTest(){


    InputStream inputStream = null;
    {
        try {
            inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //创造sqlsessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession= sqlSessionFactory.openSession();
    UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
   User user= userMapper.queryById(10);
    System.out.println(user);
}

 

 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> <!-- 是用resource属性加载外部配置文件 比如jdbc信息,公共常量配置信息--> <properties resource="jdbc.properties"></properties> <!--配置别名 方便开发中的 (多半的返回值与参数值是实体类)使用简单的缩写类名,而不是全路径 在就可以使用设置的别名了 别名大小写不敏感--> <typeAliases> <!--<typeAlias type="com.web.mybatis.pojo.User " alias="User"></typeAlias>--> <!--扫描此包 及子包下所有的类文件--> <package name="com.web.mybatis.pojo" ></package> </typeAliases> <!-- 和spring整合后 environments配置将废除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理 可配置数据库连接池或者 使用上面properties里面的信息${username}--> <transactionManager type="JDBC" /> <!-- 数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <!--告诉你的sql mapper文件在哪 这个sqlMapConfig做统一管理--> <mappers> <!--注册指定包下的所有mapper接口 使用iDEA要在resources目录下去存放mapper文件--> <mapper resource="Mapper/UserMapper.xml" ></mapper> <!--如:<package name="cn.web.mybatis.mapper"/>--> <!--注意: 此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。&ndash;&gt;--> </mappers> </configuration>




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文件就是写sql语句的,mybatis只需要程序员关注sql语句本身-->
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 比如queryById在两个mapper xml都有这个id,为了区分使用namespace -->
<mapper namespace="com.web.mybatis.mapper.UserMapper">
    <select id="queryById" parameterType="Integer" resultType="User">
    select  * from user where  id=#{v}
</select>

    <!-- //根据用户名称模糊查询用户列表
    #{}    select * from user where id = ?    占位符  ? ==  '五'
    ${}    select * from user where username like '%五%'  字符串拼接  -->
    <!--&#45;&#45;        select  *  from `user` where username like  #{name}-->

    <select id="queryByName" parameterType="String" resultType="user">
    select  *  from `user` where username like  '%${value}%'
   </select>

    <!-- 保存用户 -->
    <!-- selectKey 标签实现主键返回 -->
    <!-- keyColumn:主键对应的表中的哪一列 -->
    <!-- keyProperty:主键对应的pojo中的哪一个属性 -->
    <!-- order:设置在执行insert语句前执行查询id的sql,孩纸在执行insert语句之后执行查询id的sql -->
    <!-- resultType:设置返回的id的类型 -->
    <insert id="saveUser" parameterType="user">
        <selectKey keyColumn="id" keyProperty="id" resultType="Int" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO `user`
        (username,birthday,sex,address) VALUES
        (#{username},#{birthday},#{sex},#{address})
    </insert>


    <update id="updateUserById" parameterType="user">
      UPDATE `user` SET
    username = #{username}  WHERE id = #{id}
    </update>

    <!-- 删除用户 -->
    <delete id="deleteUserById" parameterType="int">
        delete from user where
        id=#{id}
    </delete>
</mapper>

 

 

 

 

 

posted @ 2019-01-31 14:56  夜半钟声到客船  阅读(853)  评论(0编辑  收藏  举报