$和#的区别
程序员文章站
2022-06-10 08:30:00
...
$和#的区别
1.$和#都可以充当占位符,$符号的底层是由Statement实现的,
#底层是由PreparedStatement实现的
2.#是先编译sql语句,然后在传值,给传入的值都加上双引号
$是直接拼接字符串,不会给传入的值加上双引号
<!--(1)实体类 com.xalo.entity-->
public class Student {
private String name;
private Integer age;
<!--提供有参无参的构造方法, setter和getter方法 重写toString()方法-->
}
<!--(2)com.xalo.dao.inter-->
public interface StudentDao {
//根据姓名查询学生
@Select("select * from student where name = ${value}")
public List<Map<String,Object>> queryStudentByName(String name) throws Exception;
}
<!--(3)mybatis_config_xml-->
<!--调用log4j 打印sql语句 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!-- 为java类型起别名,在配置文件中就可以使用别名 目的:书写简单方便-->
<typeAliases>
<typeAlias type="com.xalo.model.Student" alias="Student"/>
</typeAliases>
<!-- 数据库环境配置,一个环境对应一个数据库,将来和spring整合之后,就不在配置-->
<environments default="development">
<environment id="development">
<!-- 事物类型配置 JDBC:使用JDBC的事物管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源的配置 POOLED:使用mybatis默认的数据源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!-- useSSL=false: 是否使用加密 -->
<property name="url" value="jdbc:mysql://localhost:3306/has?useUnicode=true&characterEncoding=UTF8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="12345678"/>
</dataSource>
</environment>
</environments>
<!-- 映射文件的导入 -->
<mappers>
<!--注解的使用:在mybatis的配置文件中注册这个映射接口(注意是class) -->
<mapper class="com.xalo.dao.inter.StudentDao"></mapper>
</mappers>
<!--(4)测试-->
<!--SqlSessionFactoryBuilder:
创建session工厂,所以session=工厂创建成功,就可以将占有的资源释放掉,作用域是一个局部变量
SqlSessionFactory:
创建session对象,我们没有必要每创建一个session对象,都是一个session工厂对象;
所以SqlSessionFactory对象的作用域是整个应用. 单例模式
SqlSession:
使用CURD数据使用,由于该对象是非线程安全的,
所以我们希望每个线程都拥有自己的session对象,所以该对象的作用域为局部变量-->
public class DaoTest {
@Test
public void testInterface() {
InputStream in;
try {
in = Resources.getResourceAsStream("mybatis_config.xml"); <!--读取配置文件-->
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(in); <!--加载配置文件并创建session工厂-->
SqlSession session = sf.openSession(); <!-- 创建session对象-->
StudentDao studentDao = session.getMapper(StudentDao.class);
List<Map<String, Object>> list = studentDao.queryStudentByName("'碧瑶'");
System.out.println(list);
session.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
<!--测试:
增删改需要提交事务,查询时不需要提交事务(session commit)
建立实体类时最好也进行实例化
(实体类 implement Serializable)-->
}