Mbatis 的#{}和¥{}说明:

关于:Mbatis 访问数据的#{}和¥{}说明:

亲身体验,并不是#对所有的数据都默认加引号

如果传入的是字符串类型数据 参数用#{}访问就会加引号;如果不是则不会加引号(如下面例子的的Long类型)

当然#能防止注入攻击
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

以下例子是用ibatis(mybatis同理,访问格式不同而已(ibatis#参数#,mybatis#{} ))

 /**
     * 如果说插入的参数是数值类型的,#映射不会加上'';这时候如果数据库里的对应字段是字符类型,且存在字符数据的时候;就会报错;
     * 所以一般我们还是需要数据库类型和参数类型对应
     * @param registerNo
     * @return
     */
    public Long getFarePublishByRegisterNoAndType(Long registerNo,String registerType){
        Long baseFareId = null;
        try{
            Map<String,Object> params = new HashMap<String, Object>();
            params.put("registerNo", registerNo);//参数数值型;#访问不会加''
            params.put("registerType", registerType);
            baseFareId = (Long)getSqlMapRepository().queryByObject("getBaseFareInterByRegisterNoAndType",params);
        } catch (Exception a) {
            a.printStackTrace();
        }
        return baseFareId;
    }

sql是这样的:其中DISPLAY_NO在数据库里是varchar2类型;传入的registerNo是Long类型

<select id="getBaseFareInterByRegisterNoAndType" parameterClass="java.util.HashMap" resultClass="java.lang.Long">
        <![CDATA[ SELECT T.ID FROM T_BASE_FARE_INTER T WHERE T.DISPLAY_NO=#registerNo# AND T.FARE_TYPE=#registerType# ]]>
    </select>

由于插入的参数registerNo 是数值类型的,#映射不会加上”;所以如果存在一条 DISPLAY_NO 字段非数值型数据的记录,就会报错

解决方法:

  • 我们应该尽量保存数据库中字段类型和参数类型对应;
public Long getFarePublishByRegisterNoAndType(Long registerNo,String registerType){
        Long baseFareId = null;
        try{
            Map<String,Object> params = new HashMap<String, Object>();
            params.put("registerNo", registerNo.toString());//参数字符型;#访问会加''
            params.put("registerType", registerType);
            baseFareId = (Long)getSqlMapRepository().queryByObject("getBaseFareInterByRegisterNoAndType",params);
        } catch (Exception a) {
            a.printStackTrace();
        }
        return baseFareId;
    }
  • 显示加引号
<select id="getBaseFareInterByRegisterNoAndType" parameterClass="java.util.HashMap" resultClass="java.lang.Long">
        <![CDATA[ SELECT T.ID FROM T_BASE_FARE_INTER T WHERE T.DISPLAY_NO='$registerNo$' AND T.FARE_TYPE=#registerType# ]]>
    </select>
好的,以下是一个简单的使用MyBatis框架和Tomcat Servlet的Web项目。 1. 首先,你需要下载并安装MyBatis和Tomcat Servlet。 2. 创建一个Maven项目,并将以下依赖项添加到pom.xml文件: ```xml <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> </dependencies> ``` 3. 在src/main/resources目录下创建一个mybatis-config.xml文件,配置MyBatis框架。 ```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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/UserMapper.xml" /> </mappers> </configuration> ``` 这里的配置是使用MySQL数据库,你需要根据自己的情况进行修改。 4. 在src/main/java目录下创建一个Servlet类,用于处理HTTP请求。 ```java import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; @WebServlet("/user") public class UserServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { SqlSessionFactory factory = new SqlSessionFactoryBuilder() .build(UserServlet.class.getResourceAsStream("/mybatis-config.xml")); SqlSession session = factory.openSession(); List<User> users = session.selectList("UserMapper.getAllUsers"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<h1>Users</h1>"); out.println("<ul>"); for (User user : users) { out.println("<li>" + user.getName() + "</li>"); } out.println("</ul>"); out.println("</body>"); out.println("</html>"); session.close(); } } ``` 这个Servlet类会查询数据库的所有用户,并将它们显示在网页上。 5. 在src/main/java目录下创建一个User类,用于表示用户对象。 ```java public class User { private int id; private String name; private String email; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } ``` 6. 在src/main/resources/mapper目录下创建一个UserMapper.xml文件,用于定义SQL语句和映射关系。 ```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 namespace="UserMapper"> <select id="getAllUsers" resultType="User"> SELECT * FROM users </select> </mapper> ``` 这个文件定义了一个getAllUsers查询,它会返回所有用户对象。 7. 最后,在Tomcat运行这个Web项目。你可以使用以下命令打包项目: ``` mvn clean package ``` 然后将target目录下生成的.war文件复制到Tomcat的webapps目录下,并启动Tomcat服务器。 现在你可以在浏览器访问http://localhost:8080/你的项目名/user,就会看到所有用户的列表了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值