目录
二,为实体类注册别名(优化SqlMapConfig.xml)
使用 typeAliases 标签,进行对pojo实体类的注册别名
4,添加jdbc.properties数据库配置文件到resources目录文件
7,添加mapper.xml的文件夹,新建与mapper.xml的namespace对应的接口,放在同一文件夹下
解析SqlMapConfig.xml核心文件,将解析的文件保存在IO输入流中;
- //1,使用文件流,读取核心配置文件SqlMapConfig.xml
- InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
- //2,创建sqlSessionFactory,bean工厂
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
- //3,获取sqlSession
- SqlSession sqlSession = factory.openSession();

- <typeAliases>
-
- <typeAlias type="com.pojo.Stu" alias="stu">typeAlias>
- typeAliases>
- <typeAliases>
-
- <package name="com.pojo"/>
- typeAliases>
-
- <settings>
- <setting name="logImpl" value="STDOUT_LOGGING"/>
- settings>
设置完底层代码输出的后的打印的日志

在三层架构中,业务逻辑层要通过接口来实现数据库的访问,动态代理可以实现

1,UsersMapper.xml与UsersMapper.java的接口必须同一个目录下。
2,UsersMapper.xml与UsersMapper.java的文件名一致,后缀不管。
3,UsersMapper.xml文件中的标签的id值 与 UsersMapper.java的接口中的方法名称保持一致。(接口中的方法与id一致,就可以通过接口的名称找到对应的id)
4,UsersMapper.xml文件中的parameterType()标签中的参数类型 与 UserMapper.java接口中的参数类型完全一致
5,UsersMapper.xml文件中的resultType()标签中的值类型 与 UserMapper.java接口中的返回值的类型完全一致
6,UsersMapper.xml文件中的 nameSpace 标签中的值类型 与 UserMapper.java接口的完全限定名(即从当前java.main路劲触发的全路径名)。如:com.yyk.UserMapper.java
7,在SqlMapConfig.xml文件中注册mapper文件时,使用class= UserMapper.java接口的完全限定名。
- use ssm;
- create table if not EXISTS USER(
- id int(11) not null auto_increment,
- username VARCHAR(32) COMMENT '用户名',
- birthday date DEFAULT null COMMENT '生日',
- sex char(2) DEFAULT null COMMENT '性别',
- address VARCHAR(256) DEFAULT NULL COMMENT '地址',
- PRIMARY KEY (id)
- );
-
- INSERT into USER(username,birthday,sex,address) VALUES('张三','2000-01-08','1','陕西');
- INSERT into USER(username,birthday,sex,address) VALUES('李飒','2001-02-02','2','北京');
- INSERT into USER(username,birthday,sex,address) VALUES('王五','2000-4-06','1','南京');
- INSERT into USER(username,birthday,sex,address) VALUES('老六','2000-08-09','1','上海');
- INSERT into USER(username,birthday,sex,address) VALUES('钱七','1999-03-01','2','广州');
- INSERT into USER(username,birthday,sex,address) VALUES('王三','1990-12-12','1','深圳');
- INSERT into USER(username,birthday,sex,address) VALUES('李八','1999-12-02','1','深圳');
- INSERT into USER(username,birthday,sex,address) VALUES('王七','1999-02-12','1','深圳');
-
- SELECT * FROM User;
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>3.5.6version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>5.1.32version>
- dependency>
- <build>
- <resources>
- <resource>
- <directory>src/main/javadirectory>
- <includes>
- <include>**/*.xmlinclude>
- <include>**/*.propertiesinclude>
- includes>
- resource>
-
- <resource>
- <directory>src/main/resourcesdirectory>
- <includes>
- <include>**/*.xmlinclude>
- <include>**/*.propertiesinclude>
- includes>
- resource>
- resources>
- build>
- jdbc.driverClassName=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/ssm
- jdbc.username=root
- jdbc.password=123456
- configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
- <properties resource="jdbc.properties">properties>
-
- <settings>
- <setting name="logImpl" value="STDOUT_LOGGING"/>
- settings>
-
- <typeAliases>
- <package name="com.mybatis.pojo"/>
- typeAliases>
-
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC">transactionManager>
- <dataSource type="POOLED">
-
- <property name="driver" value="${jdbc.driverClassName}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- dataSource>
- environment>
- environments>
-
- <mappers>
- <mapper class="com.mybatis.mapper.UserMapper">mapper>
- mappers>
- configuration>
- public class User {
- private Integer id;
- private String userName;
- private Date birthday;
- private String sex;
- private String address;
<mapper namespace="com.mybatis.mapper.UserMapper">

遵循动态代理的规范
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.mybatis.mapper.UserMapper">
-
- <select id="getAll" resultType="user">
- select id,username,birthday,sex,address
- from user;
- select>
-
-
- <select id="getID" parameterType="int" resultType="user">
- select id,username,birthday,sex,address
- from user
- where id = #{id};
- select>
-
-
- <select id="getByName" parameterType="string" resultType="user">
- select id,username,birthday,sex,address
- from user
- where username like '%${name}%';
- select>
-
-
-
- <update id="update" parameterType="user">
- update user set username = #{userName},birthday = #{birthday},
- sex = #{sex},address = #{address} where id = #{id};
- update>
-
-
- <insert id="insert" parameterType="user" >
- insert into user (username,birthday,sex,address) values (#{userName},#{birthday},#{sex},#{address});
- insert>
-
-
- <delete id="delete" parameterType="int">
- delete from user where id = #{id};
- delete>
-
- mapper>
- package com.mybatis;
-
- import com.mybatis.mapper.UserMapper;
- import com.mybatis.pojo.User;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.List;
-
- public class MyTest {
- //数据连接对象
- SqlSession sqlSession;
- //接口代理对象
- UserMapper userMapper;
- //设置日期转换
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- @Before
- public void before() throws IOException {
- //1,加载SQlMapConfig核心配置文件
- InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
- //2,创建SQlSessionFactory()
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
- //3,获取sqlSession
- sqlSession = factory.openSession();
-
- //4,取出动态代理的对象,
- // 完成接口中方法的调用,实则是调用xml文件中向对应的标签的功能
- //标签的id对应的是接口中的方法名,这是mybatis的动态代理规范。
- userMapper = sqlSession.getMapper(UserMapper.class);
- System.out.println("代理对象的类型"+userMapper.getClass());
- }
- @After
- public void close(){
- //5,释放资源
- sqlSession.close();
- }
-
- @Test
- public void testGetAll(){
- //5,执行sql
- List
users = userMapper.getAll(); - users.forEach(user -> System.out.println(user));
- }
-
- @Test
- public void testGetID(){
- User user = userMapper.getID(2);
- System.out.println(user);
- }
-
- //有问题
- @Test
- public void testGetByName(){
- List
users = userMapper.getByName("j"); - users.forEach(user -> System.out.println(user));
- }
-
- @Test
- public void testInsert() throws ParseException {
- int insert = userMapper.insert(new User("jj", format.parse("2000-01-03"), "1", "安徽"));
- sqlSession.commit();
- System.out.println("************" + insert + "***********");
- }
-
- @Test
- public void testUpdate() throws ParseException {
- User user = new User(1,"一二",format.parse("2012-03-08"),"1","BJ");
- userMapper.update(user);
- sqlSession.commit();
- }
-
- @Test
- public void testDelete(){
- userMapper.delete(1);
- sqlSession.commit();
- }
- }
- <mappers>
-
- <mapper class="com.mybatis.mapper.UserMapper">mapper>
- mappers>
- <mappers>
-
- <package name="com.mybatis.mapper"/>
- mappers>
是对非字符串拼接的占位符,{}中可以任意写,但是如果占位符是对象类型,则{}内必须是对象的属性名称,使用#{}是安全的,可以防止sql注入
#{}底层使用的PrepareStatement,防止安全注入
1,#{}内的内容主要是看parameterType(...)的类型,如果是基本数据类型或String类,则#{}内随便写。

因为:
2,#{}如果传入的是对象类型,则需要传入成员变量的名称,而且区分大小写

90%进行的字符串拼接或字符串替换。如果传入的基本数据类型,${}里面必须是value,如果是对象类型,则传入对象名称。${}可以替换列名或列表,存在sql注入问题。
${}类型看 parameterType() 的内容
1,${}内的内容主要是看parameterType(...)的类型,如果是基本数据类型或String类,则${}内随便写。

2,${}如果传入的是对象类型,则需要传入成员变量的名称,而且区分大小写
优化模糊查询,以后都采用这种方式,解决sql注入
- <select id="getByName" parameterType="string" resultType="user">
- select id,username,birthday,sex,address
- from user
- -- where username like '%${name}%';
- where username like concat('%',#{name},'%');
- select>
3,字串替换
使用${}来替换查询的列名
- //按指定参数模糊查询
- List
getByPara(@Param("columnName") String columnName, @Param("columnValue") String columnValue);
如果方法在参数个数 大于1个 mapper.xml文件中的parameterType参数类型不写
- <select id="getByPara" resultType="user">
- select id,username,birthday,sex,address
- from user
- where ${columnName} like concat('%',#{columnValue},'%');
- select>
- public void testGetByPara(){
- List
users = userMapper.getByPara("id", "2"); - users.forEach((user -> System.out.println(user)));
- }
