zoukankan      html  css  js  c++  java
  • 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>
    
    
    
     
     
  • 相关阅读:
    python 回调函数,最简单的例子
    python 构造一个可以返回多个值的函数
    python 使用函数参数注解
    Python 两个星号(**)的 参数
    python 什么是位置参数?
    sqlalchemy 的 ORM 与 Core 混合方式使用示例
    sqlalchemy 的 Core 方式使用示例
    sqlalchemy 的 ORM 方式使用示例
    sys.stdin的三种方式
    可以多分类的神经网络
  • 原文地址:https://www.cnblogs.com/hejunhong/p/10341999.html
Copyright © 2011-2022 走看看