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映射文件名称相同,且放在同一个目录中。–>--> </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 '%五%' 字符串拼接 --> <!---- 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>